C#连接数据库的方法

2019-12-26 13:37:49丽君
  •     public static object FromDBValue(this object dbValue)      { 
  •       return dbValue == DBNull.Value ? null : dbValue;      } 
  •   }  ?

    封装方法的原则:把不变的放到方法里,把变化的放到参数里,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类型。所以需要这样用:
     

    1. object objName;  string name=tbName.Text; 
    2. if(name.Length<0)  { 
    3.   objName=DBNull.Value;  }else 
    4. {    objName=name; 
    ?

    接着SqlParameter参数改为objName。

    同时读取数据库时,存在Null,返回给.NET的值也是DBNull.Value。所以读取后还要判断后赋值,用法如下:
     

    1. if(row[“Name”]==DBNull.Value)  { 
    2.  name=null;  } 
    3. else  { 
    4.  name=(string)row[“Name”];  } 
    ?

    但是也有个问题,如果是int类型,则不能为null,就该定义的时候用int? age。

    必须严格区分0,NULL和“”,否则出现问题很难查到。