zoukankan      html  css  js  c++  java
  • 数据库中复杂的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
  • 相关阅读:
    单步调试及回滚测试
    程序员的自我修养阅读笔记03
    第八周总结
    NABCD项目分析
    程序员的自我修养阅读笔记02
    第七周总结
    程序员的自我修养阅读笔记01
    第六周总结
    结对地铁开发
    第五周总结
  • 原文地址:https://www.cnblogs.com/chuizhuizhigan/p/3317370.html
Copyright © 2011-2022 走看看