C# 開發環境: VisualStudio2015 資料庫: SQLserver2008 程式主界面: 註釋: lbl標簽: 程式中的lbl標簽:編號、人數、姓名、性別、請輸入要查詢的信息,這裡他們只起到了說明作用,所有命名一般為預設,只修改Text文本。 程式中的lbl標簽:編號後面的0,他起到了 ...
C#
開發環境:
VisualStudio2015
資料庫:
SQLserver2008
程式主界面:
註釋:
lbl標簽:
程式中的lbl標簽:編號、人數、姓名、性別、請輸入要查詢的信息,這裡他們只起到了說明作用,所有命名一般為預設,只修改Text文本。
程式中的lbl標簽:編號後面的0,他起到了同步表中選中人員的id(編號) 人數後面的0,他的作用是時時更新表中總人數,他們的命名要規範,後面的代碼才能編寫更方便。
按鈕:
程式中的btn按鈕:保存、重置、退出、添加、查詢,要想實現他們的功能,就得雙擊他們然後在裡面打上代碼,才能賦予他們功能,這裡要註意按鈕的命名規範。
保存按鈕功能:
程式運行時,在姓名TextBox文本框中、性別TextBox文本框中,分別輸入人員的姓名、性別,然後按保存按鈕,人員的信息就被存到了資料庫中。
運行圖:
保存按鈕代碼:
if (checkinput()) { using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); string sql = "insert B(name,sex) values (@name,@sex)"; SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.Add(new SqlParameter("@name", txtname.Text)); cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text)); int fh = cmd.ExecuteNonQuery(); if (fh > 0) MessageBox.Show("添加成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); sj(); rs(); } }
這裡調用了檢測輸入的完整性方法:checkinput,如果姓名TextBox文本框或性別TextBox文本框中,姓名沒輸入,程式會提示請輸入姓名,性別沒輸入,程式會提示請輸入性別。
檢測輸入的完整性方法代碼:
private bool checkinput() { if (txtname.Text == null || txtname.Text == "") { MessageBox.Show("請輸入姓名", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Error); txtname.Focus(); return false; } if (txtsex.Text == null || txtsex.Text == "") { MessageBox.Show("請輸入性別", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Error); txtsex.Focus(); return false; } return true; }
信息輸入不完整運行效果圖:
保存按鈕的代碼里還調用了,sj();rs();這兩個方法,sj();這個方法起到了刷新添加人員的信息到DGV表格中,rs();這個方法起到了更新lbl人數標簽後面的數據功能,更新了總人數的數據信息。
新加一個人員運行圖:
信息輸入完整添加成功,大家看人數後面的數字是:12,當我按確定以後,神奇的事情就發生了!
人數後面的數字12變成了13,這裡就是因為保存按鈕里調用了,rs();這個方法所以才有更新數據的功能
rs();方法的代碼:
private void rs() { using (SqlConnection con = new SqlConnection("server=.;uid=sa;pwd=sa;database=YG")) { con.Open(); string sql = "select count(*)from B"; SqlCommand cmd = new SqlCommand(sql, con); object cx = cmd.ExecuteScalar(); //lblRS.Text = cx.ToString(); 將查詢到的結果同步標簽 lblrs.Text = cx.ToString(); //將查詢到的結果同步到lbl標簽 } }
新保存的人員數據,馬上就能在DGV表格中找到:
這是因為保存按鈕代碼里調用了,sj();這個方法,將新保存的人員信息更新到了DGV表格中。
sj();方法的代碼:
private void sj() { SqlConnection con = new SqlConnection(conStr);//創建連接對象指定連接字元串 string sql = "select*from B";//sql查詢語句 SqlDataAdapter cx = new SqlDataAdapter(sql, con);//連接資料庫並執行sql語句 DataTable ta = new DataTable();//創建表對象 cx.Fill(ta);//將查詢的內容填充到表對象 dataGridView1.DataSource = ta;//設置DGV表的數據來源 }
保存按鈕代碼:
if (checkinput())//調用檢測輸入的完整性方法 { using (SqlConnection con = new SqlConnection(conStr))//創建連接對象,指定連接字元串 { con.Open();//打開連接 string sql = "insert B(name,sex) values (@name,@sex)";//SQL語句,在資料庫里要執行的操作 SqlCommand cmd = new SqlCommand(sql, con);//Cmand命名對象執行操作 cmd.Parameters.Add(new SqlParameter("@name", txtname.Text));//指定參數跟對應的數據匹配 cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text));//指定參數跟對應的數據匹配 int fh = cmd.ExecuteNonQuery();//ExecuteNonQuery(),這個方法在執行增、刪、改的時候就調用它 if (fh > 0) MessageBox.Show("添加成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); sj();//調用這個方法更新DGV表格中的數據 rs();//調用這個方法更行lbl總人數的數據 } }
SqlCommand對象的三個方法:
ExcuteScalar():
這個方法只返回查詢結果集的第一行第一列
ExcuteNonQuery():
執行一個SQL語句,返回受影響的行數,這個方法主要用於執行對資料庫執行增加、修改、刪除操作
ExcuteReader():
查詢多行多列
重置按鈕的代碼:
lblid.Text = "0";//lbl文本預設為0 txtname.Clear();//將Text文本框的內容清空 txtsex.Clear();//將Text文本框的內容清空 txtname.Focus();//設置焦點
運行圖:
輸入好信息後,點擊重置按鈕就會清空輸入的信息
退出按鈕的代碼:
Application.Exit();
點擊退出後,程式就會被關閉。
添加按鈕代碼:
添加人員 a = new 添加人員();//創建窗體對象 a.ShowDialog();//以對話框模式彈出 sj();//調用sj();這個方法來更新添加的人員數據到DGV表格中
這裡添加按鈕的功能跟保存按鈕的功能是類似的,目的都是為了添加人員數據,只不過我們在這裡做了一點代碼知識的擴展。
運行圖:
輸入的信息不完整的話,會提示請輸入完整的信息,這裡也得寫一個檢測輸入完整性的方法,信息輸入完整後就可以點擊保存了,保存按鈕的代碼和上面的類似,點擊返回按鈕後當前窗體就會關閉返回到人員管理主界面。
將SQL資料庫中的數據讀取到程式的DGV表格中代碼:
private void sj() { SqlConnection con = new SqlConnection(conStr);//創建連接對象指定連接字元串 string sql = "select*from B";//sql查詢語句 SqlDataAdapter cx = new SqlDataAdapter(sql, con);//連接資料庫並執行sql語句 DataTable ta = new DataTable();//創建表對象 cx.Fill(ta);//將查詢的內容填充到表對象 dataGridView1.DataSource = ta;//設置DGV表的數據來源 }
其實這個方法在前面就已經出現過了,當我們新增一個人員的時候,就得調用sj();這個方法來更新DGV表格中的數據。
查詢按鈕代碼:
SqlConnection con = new SqlConnection(conStr);//創建連接對象指定連接字元串 //string sql = "select * from B where name like '%"+ txtcx.Text + "%'"; string sql = string.Format("select*from B where name like'%{0}%' or sex like'%{1}%' or id like'%{2}%'",txtcx.Text,txtcx.Text,txtcx.Text);//SQL語句根據TextBox輸入的查詢條件進行模糊查詢 DataTable b1 = new DataTable();//創建表對象 SqlDataAdapter cx1 = new SqlDataAdapter(sql, con);//連接資料庫並執行sql語句 cx1.Fill(b1);//將查詢的內容填充到表對象 dataGridView1.DataSource = b1;//設置DGV表的數據來源
運行圖:
在TextBox文本框中,根據姓查詢這裡輸入了一個:劉 DGV表格中就會顯示所有姓劉的人員信息
運行圖:
在TextBox文本框中,根據性別查詢這裡輸入了一個:男 DGV表格中顯示了所有性別為男的信息。
那麼功能都差不多快完善了,我們會發現有了新增,卻少了刪除跟修改的功能!!!
運行圖:
在這裡我們可以在DGV表格裡加一個上下文菜單,來實現修改和刪除的功能。
右鍵菜單中修改按鈕的代碼:
添加人員 a = new 添加人員();//創建窗體對象 a.Text = "修改人員";//將添加人員的窗體Text文本修改為“修改人員” a.Tag = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString();//將選中的數據傳遞給修改人員窗體 a.txtname.Text = dataGridView1.SelectedRows[0].Cells["name"].Value.ToString();//DGV表中選中的人員名字傳遞到修改人員窗體 a.txtsex.Text = dataGridView1.SelectedRows[0].Cells["sex"].Value.ToString();///DGV表中選中的人員性別傳遞到修改人員窗體 a.ShowDialog();//以對話框模式彈出
運行圖:
修改人員的窗體與點擊添加按鈕彈出的窗體是同一個窗體,這裡只不過是用代碼修改了窗體的Text文本而已,DGV表中選中的數據也同步到了修改人員窗體對應的Text文本框中,在這裡我們只需要直接修改那些要修改的地方就KO了。
運行圖:
修改人員窗體中保存按鈕代碼:
if (checkinput()) { if (this.Text == "添加人員") { using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); string sql = "insert B(name,sex) values (@name,@sex)"; SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.Add(new SqlParameter("@name", txtname.Text)); cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text)); int fh = cmd.ExecuteNonQuery(); if (fh > 0) MessageBox.Show("添加成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.Close(); } } else { using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); //update<修改對象所在表> set < 修改對象 >=< 值 > where < 條件對象 >=< '條件內容' > string sql = "update B set name=@name,sex=@sex where id=@id"; SqlCommand cmd = new SqlCommand(sql, con); cmd.Parameters.Add(new SqlParameter("@id", this.Tag.ToString())); cmd.Parameters.Add(new SqlParameter("@name", txtname.Text)); cmd.Parameters.Add(new SqlParameter("@sex", txtsex.Text)); int fh = cmd.ExecuteNonQuery(); if (fh > 0) MessageBox.Show("修改成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.Close(); } } }
修改人員中的保存按鈕代碼,跟點擊添加按鈕彈出的窗體中保存按鈕代碼一致,邏輯可能一時難以領悟,多看幾遍就熟能生巧了!
右鍵菜單中刪除按鈕的代碼:
if (dataGridView1.SelectedRows.Count > 0) { string xz = dataGridView1.SelectedRows[0].Cells["id"].Value.ToString(); using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); string sql = string.Format("delete from B where id='{0}'", xz); SqlCommand cmd = new SqlCommand(sql, con); int fh = cmd.ExecuteNonQuery(); if (fh > 0) { MessageBox.Show("刪除成功!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); sj(); rs(); } else { MessageBox.Show("刪除失敗!", "系統提示", MessageBoxButtons.OK, MessageBoxIcon.Error); sj(); rs(); } }
增、刪、改、查,的代碼流程都大致相同:首先創建連接對象指定連接字元串,打開連接、sql語句在資料庫里要做什麼操作(增、刪、改、查)、然後創建Command命令對象連接資料庫並執行sql語句,定義一個變數來接收方法的返回值,增、刪、改操作時,調用ExecuteNonQuer這個方法,查詢操作時,一般調用的是ExcuteReader這個方法,要做的操作不同,調用的方法也會不同,定義變數時也得定義匹配這個方法的變數。