在建立数据库的时候,我们可以把字段类型设置为可空或者非可空。如果遇到某些字段可空的时候我们应该如何插入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;"