数据库中复杂的NULL问题
数据库中Null表示不知道
需求:如果没输姓名,则说明姓名是“不知道”,因此是Null
如果没输入年龄,则年龄是Null,而不是0
Null不是'',Null也不是0
三个的区别:string类型有空是‘’,不知道Null,int类型只能是0.
- 查询表中所有的数据
- 查询LoginName等于空,查询名字为空的一栏
- 查询LoginName等于不知道的一列
- 查询LoginName等于不知道的一列
- 查询ErrorTimes等于0
如果给的参数的值为“不知道”则其实是没有给该参数赋值
1 //添加数据的时候,判断用户是否未填,未填在数据库中表示NULL。NULL和“”,0表示的意思不一样。 2 private void btnAdd_Click(object sender, RoutedEventArgs e) 3 { 4 //DBNull.Value是数据库中的NULL,所以不可以直接拿来和其他类型的数据比较。 5 string num = textBox1.Text; 6 string name=textBox2.Text; 7 string pwd=textBox3.Text; 8 string error=textBox4.Text; 9 //“num.Length <= 0”长度小于0,是防御性编程。 10 //"object objid"设置object类型就可以任意指向了。 11 object objid; 12 //判断用户是否输入,未输入的在数据库中表示NULL。 13 if (num.Length <= 0) 14 { 15 //object指向DBNull.Value 16 objid = DBNull.Value; 17 } 18 else 19 { 20 //object指向字符串 21 objid = num; 22 } 23 object objname; 24 if (name.Length <= 0) 25 { 26 objname = DBNull.Value; 27 } 28 else 29 { 30 objname = name; 31 } 32 object objpwd; 33 if (pwd.Length <= 0) 34 { 35 objpwd = DBNull.Value; 36 } 37 else 38 { 39 objpwd = pwd; 40 } 41 object objerror; 42 if (error.Length <= 0) 43 { 44 objerror = DBNull.Value; 45 } 46 else 47 { 48 objerror = error; 49 } 50 int add = SqlHelper.ExecuteNonQuery(@"insert into Table_2 values(@Id,@LoginName,@LoginPwd,@ErrorTimes)", 51 new SqlParameter("@Id",objid ),//这边想赋值NULL,是.net赋值,必须是DBNull.Value才可以。 52 new SqlParameter("@LoginName", objname), 53 new SqlParameter("@LoginPwd",objpwd), 54 new SqlParameter("@ErrorTimes",objerror)); 55 if(add>0) 56 { 57 MessageBox.Show("Success"); 58 } 59 }
1 private void btnNull_Click(object sender, RoutedEventArgs e) 2 { 3 DataTable dt = SqlHelper.ExecuteDataSet("select * from Table_2 where Id='501B1197-C823-48CF-922C-023B68056444'").Tables[0]; 4 DataRow row = dt.Rows[0]; 5 //读取的值如果在数据库中是NULL,则读取的时候是DBNull.Value; 6 //读取的值如果在数据库中是"",则读取的时候是“” 7 string loginname; 8 if (row["LoginName"] == DBNull.Value) 9 { 10 loginname = null; 11 } 12 else 13 { 14 loginname = (string)row["LoginName"]; 15 } 16 //int类型,bool类型等都不是null,要转换成可空类型。 17 int? errortime; 18 if (row["ErrorTimes"] == DBNull.Value) 19 { 20 errortime = null; 21 } 22 else 23 { 24 errortime = (int)row["ErrorTimes"]; 25 } 26 }