在建立數據庫的時候,我們可以把字段類型設置為可空或者非可空。如果遇到某些字段可空的時候我們應該如何插入NULL值得數據,以及如何讀取NULL值得數據呢?這里用一個小案例來分析這個問題。
①首先當然是建立一個數據庫表,其中有兩個可空字段,一個非空字段。具體如下圖:
②新建一個窗口,在這個窗口上放上三個TextBox,分別用來給用戶輸入要導入的Name,Age,Height。然后再放入兩個Button控件,一個用來向數據庫插入這些輸入,一個用來導出數據庫中的數據。如下圖
③先來講解insert按鈕,在這個按鈕的Click事件中寫入這些代碼:
private void button1_Click(object sender, RoutedEventArgs e) { string name = textBox1.Text; string age = textBox2.Text; int height = Convert.ToInt32(textBox3.Text); Object objName; if (name.Length <= 0) { objName = DBNull.Value; } else { objName = name; } Object objAge; if (age.Length <= 0) { objAge = DBNull.Value; } else { objAge = age; } SqlHelper.ExecuteNonQuery("Insert into T_Person values (@name,@age,@height)", new SqlParameter("@name",objName), new SqlParameter("@age",objAge), new SqlParameter("@height",height)); MessageBox.Show("插入成功"); }
◇DBNull.Value是用來表示數據中的Null值的。
◇因為DBNull.Value不是string類型的,所以為了方便,我們分別創建了一個Object類型的objName以及objAge來接受這個DBNull.Value的值。
◇這樣無論用戶是否有在TextBox中輸入name或者age,都可以順利的將輸入的數據插入數據庫。
④插入數據完了之后自然就是讀取數據,在select按鈕的Click事件中寫下如下代碼:
private void button2_Click(object sender, RoutedEventArgs e) { DataTable dt = SqlHelper.ExecuteDataTable("select * from T_Person"); foreach (DataRow dr in dt.Rows) { string name; int? age; if (dr["Name"] == DBNull.Value) { name = null; } else { name = (string)dr["Name"]; } if (dr["Age"] == DBNull.Value) { age = null; } else { age = (int)dr["Age"]; } int height = (int)dr["Height"]; MessageBox.Show("姓名:"+name+" 年齡:"+age+" 身高:"+height); } }
◇這些代碼比較簡單,只有一點,有些類型是可空的,例如string類型。可是又有些類型是不可空的,例如int,bool等類型。
◇可空的類型可以接收null值,不可空的類型不能接收null值。
◇如果想讓不可空的類型接收null值,那么就在聲明變量的時候,在類型的后面加上一個“?”,例如,想要申請一個可空的int類型,如上代碼可以這樣寫道:"int? age;"