C# 数据库dataGridView刷新数据和主外键判断
本文主要講訴在使用VS2012+SQL Server數據庫做系統中,通常會遇到幾個問題.使用dataGridView控件在修改、刪除、插入數據后,怎樣刷新數據顯示操作后的結果.同時在對數據操作時通常會判斷數據的主鍵是否存在或重復,判斷外鍵是否重復,這幾個問題我推薦使用函數的形式完成,同時推薦一個操作格式,下面將詳細介紹.
一.dataGridView刷新數據
如下圖所示,在數據庫中刪除一個數據或插入一個數據,我們都希望能夠在左邊的dataGridView控件中顯示操作后的內容,而使用dataGridView1.Refresh()刷新只是刷新頁面重繪控件,沒有從數據庫里讀取內容.所以我們需要重新綁定數據,點擊按鈕故障信息刪除后,實現重新讀取數據庫的值,并顯示在控件dataGridView中即可.而這里我采用自定義函數實現重新綁定數據.
?
代碼如下:
public void ShowInfoQues() {//定義數據庫連接語句:服務器=.(本地) 數據庫名=astring consqlserver = "Data Source=.;Initial Catalog=a;Integrated Security=True;";string sql = "select * from Question"; //定義SQL查詢語句 DataSet ds = new DataSet(); //定義數據內存中緩存SqlConnection con; //定義SQL Server連接對象SqlDataAdapter da; //數據庫命令和數據庫連接con = new SqlConnection(consqlserver); //定義SQL Server連接對象da = new SqlDataAdapter(sql, con); //數據庫命令和數據庫連接con.Open();try{da.Fill(ds); //填充數據dataGridView1.DataSource = ds.Tables[0]; //獲取數據源賦值數據庫控件}catch (Exception msg){MessageBox.Show(msg.Message); //異常處理}finally{con.Close(); //關閉連接con.Dispose(); //釋放連接da.Dispose(); //釋放資源} }點擊按鈕"故障信息刪除"后調用該函數ShowInfoQues()即可實現,通常填充數據中需要判斷語句如下,如果插入到的結果存在時數據顯示在dataGridView控件中,但這樣會存在一個問題,當數據庫中只存在一個數據時,刪除該數據后表中為空就不會更新dataGridView,因為此時已經沒有數據就不會執(zhí)行dataGridView1.DataSource = ds.Tables[0].它會始終顯示一行數據,除非在此載入該窗體,所以此時不需要下面判斷:
if (ds.Tables[0].Rows.Count > 0) //判斷是否符合條件的數據記錄 {dataGridView1.DataSource = ds.Tables[0]; }在上面代碼函數ShowInfoQues()中我設置為public,因為在點擊“故障信息導入”按鈕,它會進入另外一個界面,在那個界面填寫完要插入的數據后同時更新父窗口dataGridView控件中的數據,實現插入數據更新,其中子窗口中的構造函數將帶參數,如下圖所示是子界面的代碼:
//父窗體custServ 父窗體中含函數ShowInfoQues() custServ cstemp = new custServ(); public custServInput(custServ cs) {InitializeComponent();cstemp = cs; } //點擊"確認添加"按鈕實現滿意度調查 private void button1_Click(object sender, EventArgs e) { ... //插入數據操作cstemp.ShowInfoQues(); //父窗口刷新this.Hide(); //隱藏窗體 }父窗體中的代碼如下:
//點擊"故障信息錄入"按鈕 private void repInf_Click(object sender, EventArgs e) {custServInput cSI = new custServInput(this);cSI.Show(); }二.數據庫主外鍵的判斷
在對數據庫進行操作時,通常會遇到判斷主鍵是否存在或是否重復的問題,或判斷外鍵是否存在的問題,因為如果外鍵不存在是不能插入數據的.在判斷主鍵與外鍵時,我們可以定義一個函數,通過調用這個函數進行判斷.
//該函數用于判斷表中Phoneid(手機序列號)是否存在 private bool IsPhoneIdentify() {string consqlserver = "Data Source=.;Initial Catalog=TeleMS;Integrated Security=True;";string sql = "select * from Question where phoneid='" + textBox2.Text.Trim() + "'";SqlConnection Conn = new SqlConnection(consqlserver); //定義SQL Server連接對象 Conn.Open();SqlCommand Cmd = new SqlCommand(sql, Conn);SqlDataReader reader = Cmd.ExecuteReader(); //數據庫命令和數據庫連接if (reader.Read()) //存在{return true;}else{return false;} }上面代碼是判斷手機序列號是否存在,它通過判斷數據庫中phoneid=textBox2內容,如果存在返回true,如果不存在返回false并提示錯誤信息"該外鍵不存在,請驗證插入!"提示:使用try{..}catch(Exception msg){MessageBox.Show(msg.Message);}finally{..}時C#會自動生成異常信息,但通過自定義函數總體感覺更好,至少讓我們能更好的了解數據庫原理及常見的操作錯誤.
三.推薦格式源代碼
?通過上面的敘述,可能你還不知道怎樣使用這些函數在對數據庫進行操作時進行一些簡單的判斷,下面通過需要插入如圖數據,其中主外鍵表明:
我推薦的代碼如下:
//點擊"確認記錄"按鈕實現滿意度調查 private void button1_Click(object sender, EventArgs e) {if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == ""){MessageBox.Show("請輸入顧客身份證號、售后人員編號和手機序列號!", "信息提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else if (IsCusIdentify() == false) //顧客身份證號重復(主鍵){MessageBox.Show("該顧客身份證號已經存在,請驗證輸入!", "錯誤提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else if (IsPhoneIdentify() == false) //手機序列號不存在(外鍵){MessageBox.Show("該手機序列號不存在,請驗證輸入!", "錯誤提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else if (IsUserIdentify() == false) //售后人員編號不存在(外鍵){MessageBox.Show("該售后人員編號錯誤,請驗證!", "錯誤提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Warning);}else if (MessageBox.Show("確認要添加該進貨訂單信息?", "驗證提示",System.Windows.Forms.MessageBoxButtons.YesNo,System.Windows.Forms.MessageBoxIcon.Question)==System.Windows.Forms.DialogResult.Yes){//實現插入數據操作string sqlInsert = string.Format(@"insert into ServiceInfo...");string consqlserver = "Data Source=.;Initial Catalog=a;Integrated Security=True;";SqlConnection cons = new SqlConnection(consqlserver); //定義SQL Server連接對象 SqlCommand cmd = new SqlCommand(sqlInsert, cons); //執(zhí)行一個SQL語句try{cons.Open(); //打開連接cmd.ExecuteNonQuery(); //返回執(zhí)行SQL語句的行數MessageBox.Show("顧客手機使用滿意情況調查數據記錄成功!", "信息提示",System.Windows.Forms.MessageBoxButtons.OK,System.Windows.Forms.MessageBoxIcon.Information);csrmtemp.ShowInfoQues(); //父窗口刷新this.Hide(); //隱藏窗體}catch (Exception msg){MessageBox.Show(msg.Message); //異常處理}finally{cons.Close(); //關閉連接cons.Dispose(); //釋放連接cmd.Dispose(); //釋放資源}} }四.總結
上面的排版可能有點亂,可能寫得不是很好!但作者盡力了.原本想分成兩篇寫的,但因為上面敘述的幾點是最近做項目同時遇到的一些知識,所以就同時寫了.主要從dataGridView和主外鍵兩個方面敘述,通過自己認為比較好的代碼,傳遞給大家一些東西.希望大家能學到有用的知識,作者已盡力,如果有不足和不喜歡的地方,見諒!
(By:Eastmount 2013-9-8 夜11點http://blog.csdn.net/eastmount)
總結
以上是生活随笔為你收集整理的C# 数据库dataGridView刷新数据和主外键判断的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# VS2012操作word文档 (二
- 下一篇: C# 数据库存储过程的讲解应用