数据库可空数据处理
1、数据库中有表T_Person
id bigint primary key,
name nvarchar(50),--允许为空
age int,--允许为空
height int not null
2、问题:在给SQLServer给此表传数据时,name和age都是可以为null的,但是在程序中不会传递null值,只会传递空串,但是应该传递null值,那么怎么传递呢--------------提示:DBNull.Value
同时,ADO.Net拿到的不是
3、NULL和空串的区别
NULL:不开辟空间,表示不知道,未知
空串:开辟空间
例子:select 1+null=>null
4、界面
4、ADO.NET往数据库中存数据库,姓名、年龄不输入时应该传入NULL值,提交按钮时间
private void btn_insert_Click(object sender, RoutedEventArgs e) { object obj; string name = txt_name.Text; if (name.Length<=0) { obj = DBNull.Value; } else { obj = name; } Object objAge; string age = txt_age.Text; if (age.Length<=0) { objAge = DBNull.Value; } else { objAge = age; } string height = txt_height.Text; string sql = "insert into T_Person(name,age,height) values(@Name,@Age,@Height)"; SqlHelper.ExecuteNonQueryWithPara(sql, new SqlParameter("@Name", obj), new SqlParameter("@Age", objAge), new SqlParameter("@height", height)); MessageBox.Show("插入成功~"); }
5、从数据库中读取值为NUll的数据时,读出来的是DBNull.Value,而ADO.NET需要拿到的值是null
添加读取可空数据按钮读取如图所示第一条数据。
code
private void button1_Click(object sender, RoutedEventArgs e) { DataTable table = SqlHelper.executeDataTableWithParams("select * from T_Person where id=@ID",new SqlParameter("@ID",1)); DataRow row = table.Rows[0]; //不可直接读取,因为从数据库读取的是DBNull.Value的值,会报错不能转成string类型,报错如图所示 //string name = (string)row["name"]; string name; if (row["name"]==DBNull.Value) { name = null; } else { name = (string)row["name"]; } //同理,但注意的是int是没有null类型的,需要在int后面是加?表示可空类型 //int age = (int)row["age"]; int? age; if (row["age"]==DBNull.Value) { age = null; } else { age = (int)row["age"]; } int height = (int)row["height"]; MessageBox.Show(name +","+ age+"," + height); }
name转换异常
6、封装成方法----------------------待更新
(1)、
(2)、
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。