(10)C#之ADO.NET 数据库中的NULL值的插入与读取

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

原文地址:https://www.cnblogs.com/kaolalovemiaomiao/p/4708548.html