可空数据的插入和读出(15)
第一步:设计数据库如下,Id自增,主键:
第二步:在页面上 拖动三个TextBox,命名为txtName,txtAge,txtHeight.一个按钮btnNull,并且为他添加Click事件。
第三步:在数据库中直接插入数据和在windows窗体插入数据两者的区别。如下:
(注意:NULL 和0,null和“”都是不一样的。null表示“不知道”)
最终按钮的Click事件代码为:
private void btninNull_Click(object sender, RoutedEventArgs e) {//若没有输入姓名,则姓名表达“不知道”。年龄没有输入也该显示“null”,不应该显示0 //(注意:数据库中NULL 和0,null和“”都是不一样的。null表示“不知道”) string name=txtName.Text; string age=txtAge.Text; string height=txtHeight.Text; object objName; if (name.Length <= 0) { //name = null; objName = DBNull.Value;//DBNull.Value用来表示数据库中的NULL,但是DBNull.Value是一个类, } //无法转换成为string类型。所以需要修改下 else { objName = name; } object objAge; if (age.Length <= 0) { // age = null; objAge = DBNull.Value; } else { objAge = age; } //在SqlParameter中如果值(第二个参数)为“null”则表示没有提供参数的值,会报错的。 //SqlHelper.ExecuteNonQuery("insert into T_Person(Name,Age,Height) Values(@Name,@Age,@Height)", new SqlParameter("@Name", name), // new SqlParameter("@Age", age), new SqlParameter("@Height", height)); SqlHelper.ExecuteNonQuery("insert into T_Person(Name,Age,Height) Values(@Name,@Age,@Height)", new SqlParameter("@Name", objName), new SqlParameter("@Age", objAge), new SqlParameter("@Height", height)); } }
第四步,拖一个按钮btnReadNull并添加Cilck事件,用于读取数据库中可空的数据,代码如下:
private void btnReadNull_Click(object sender, RoutedEventArgs e) { DataTable table=SqlHelper.ExecuteDataTable("select * from T_Person where Id=1"); DataRow row=table.Rows[0]; //读取的值如果在数据库中是NULL则返回DBNull.Value //string name =(string)row["Name"];//id为1的在数据库中Name是null,在这样的代码会报错,则修改 string name; if (row["Name"] == DBNull.Value) { name = null; } else { name = (string)row["Name"]; } //int age=(int)row["Age"]; int? age;//int age;不行,是因为int不可以是null if (row["Age"] == DBNull.Value) { age = null; } else { age = (int)row["Age"]; } txtName.Text = name; //int height = (int)row["Height"]; } }
---------------------------------------------------------------------------------------------------------------------------------------------
string是引用类型;
string str = null 没有创建内存空间,str中存放的是空引用指针;
string str = "" 创建了内存空间,str中存放的是指向堆中的指针。
简单地说:
string str ="";
给你一张白纸;
string str = null;
连白纸也没有。
string.Empty就相当于""
一般用于字符串的初始化
比如:
string a;
Console.WriteLine(a);//这里会报错,因为没有初始化a
而下面不会报错:
string a=string.Empty;
Console.WriteLine(a);
或者用于比较:
if(a=="")
if(a==string.Empty)
上面两句是一样的效果。
string.Empty不分配存储空间
""分配一个长度为空的存储空间
所以一般用string.Empty
为了以后跨平台,还是用string.empty
在 C# 中,大多数情况下 "" 和 string.Empty 可以互换使用。比如:
string s = "";
string s2 = string.Empty;
if (s == string.Empty) {
//
}
if语句成立
判定为空字符串的几种写法,按照性能从高到低的顺序是:
s.Length == 0 优于 s == string.Empty 优于 s == ""
您关于String.Empty和Null的问题是这样的,这两个都是表示空字符串,其中有一个重点是string str1= String.Empty和 string str2=null 的区别,这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的,string str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,都将报错。textBox1.Text的值为零长度字符串 ""。