数据库中复杂的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         }
View Code

 

 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         }
View Code
posted @ 2013-09-12 17:18  垂坠  阅读(479)  评论(0编辑  收藏  举报