封装方法的原则:把不变的放到方法里,把变化的放到参数里,SqlHelper类里返回值是一行一列的用ExecuteScaler,ExecuteNonQuery一般用来执行UpdateDeleteInsert语句,ExecuteDataTable只用来执行查询结果比较少的sql,返回值是DataTable。
在数据库中NULL和“”不一样,NULL和0也不一样。数据库中NULL表示不“知道”。假如一个表中有个可空字段Name,如果有几个实例Name为NULL,
select * from T_Student where Name=NULL是查不到任何数据的。
select * from T_Student where Name is NULL可以查到所有Name填NULL的数据。
需求:如果没输入姓名,则姓名应该为NULL,如果没输入年龄,则年龄应该为NULL。
问题:在SqlParameter如果参数值为null,则表示没有提供参数的值,会报错。
解决方法:.NET提供DBNull.Value用来表示数据库中的NULL。以为DBNull.Value是object类型。所以需要这样用:
?
- object objName; string name=tbName.Text;
- if(name.Length<0) {
- objName=DBNull.Value; }else
- { objName=name;
- }
接着SqlParameter参数改为objName。
同时读取数据库时,存在Null,返回给.NET的值也是DBNull.Value。所以读取后还要判断后赋值,用法如下:
?
- if(row[“Name”]==DBNull.Value) {
- name=null; }
- else {
- name=(string)row[“Name”]; }
但是也有个问题,如果是int类型,则不能为null,就该定义的时候用int? age。
必须严格区分0,NULL和“”,否则出现问题很难查到。










