Null在数据库
Null在数据库中表示”不知道”
Select 1+0 运行结果是1
Select 1+Null 运行结果是Null
DBNull
在正规项目中对于Null处理是非常严谨的!!!如果用户没有输入,则数据库中以Null显示,表示“不知道”,如果数据空中Null,则在项目中转换为DBNull,再显示
1.录入过程DBNull
private void bt_OK_Click(object sender, RoutedEventArgs e)
{
//数据库中的Null表示“不知道”
//需求:姓名不输,数据库中为Null;年龄不输,数据库中为Null
//可是如下代码不能满足需求需要改进
//用户姓名不输入,年龄32
//数据库中 32
//string name = this.txt_UserName.Text.Trim();
//string age = this.txt_UserAge.Text.Trim();
//SqlHelper.ExecuteNonQuery(@"insert into T_UserInfo(UserName,UserAge) values(@username,@userage)",
//new SqlParameter("@username",name),
//new SqlParameter("@userage",age));
////虽然这里数据库会把String类型转换成Int类型,但是增加了数据库运行的负担,所以还是需要代码转换(前提是确保年龄框输入值,如果不输入值,则会报错的!)
//MessageBox.Show("成功录入!");
//下面这种,VS中的null不能转换为数据库中的Null不知道,
//用户名输入admin,年龄输入框不输入值
//数据库中会插入admin 0
//string name = this.txt_UserName.Text.Trim();
//string age = this.txt_UserAge.Text.Trim();
//if (name.Length <= 0)
//{
// name = null;
//}
//if (age.Length <= 0)
//{
// age = null;
//}
//SqlHelper.ExecuteNonQuery(@"insert into T_UserInfo(UserName,UserAge) values(@username,@userage)",
//new SqlParameter("@username", name),
//new SqlParameter("@userage", Convert.ToInt32(age)));
////虽然这里数据库会把String类型转换成Int类型,但是增加了数据库运行的负担,所以还是需要代码转换
//MessageBox.Show("成功录入!");
//引入DbNull来解决这个问题
string name = this.txt_UserName.Text.Trim();
string age = this.txt_UserAge.Text.Trim();
//if (name.Length <= 0)
//{
// name = DBNull.Value;//这里DBNull为一个Class类,无法实现与String的类型转换;
// //但是:.Net中的所有的类都继承Object,Object可以有String进行类型转换
//}
//if (age.Length <= 0)
//{
// age = null;
//}
object objname;
object objage;
if (name.Length <= 0)
{
objname = DBNull.Value;
}
else
{
objname = name;
}
if (age.Length <= 0)
{
objage = DBNull.Value;
}
else
{
objage = age;
}
SqlHelper.ExecuteNonQuery(@"insert into T_UserInfo(UserName,UserAge) values(@username,@userage)",
new SqlParameter("@username", objname),
new SqlParameter("@userage",objage));
//虽然这里数据库会把String类型转换成Int类型,但是增加了数据库运行的负担,所以还是需要代码转换
MessageBox.Show("成功录入!");
}
显示过程DBNull
private void button1_Click(object sender, RoutedEventArgs e)
{
DataTable dt = SqlHelper.ExecuteDataTable("select * from T_UserInfo where Id =16");
//数据库中Id=15的这一行中姓名为Null ,年龄为32
//按照下面这种做法是不能够对的,因为数据库中存放的Null是不知道,需要VS与数据库进行比较
//DBNull(VS) 与Null(数据库)
//string name = dt.Rows[0]["UserName"].ToString();
//int age = (int)dt.Rows[0]["UserAge"];
//this.txt_UserName.Text = name;
//this.txt_UserAge.Text = age.ToString();
string name;
if (dt.Rows[0]["UserName"] == DBNull.Value)
{
name = null;
}
else
{
name=(string)dt.Rows[0]["UserName"];
}
int? age;//int 类型和string 类型是不同的
//int 不能为空,string 可以为空,但是int ?可以为空
if (dt.Rows[0]["UserAge"] == DBNull.Value)
{
age = null;
}
else
{
age = (int)dt.Rows[0]["UserAge"];
}
this.txt_UserName.Text = name;
this.txt_UserAge.Text = age.ToString();
} |