SqlCommand的使用

来源:互联网 发布:天刀捏脸详细数据男 编辑:程序博客网 时间:2024/05/17 02:54

一.创建SqlCommand对象的方法

1.cmd=new SqlCommand();  //直接创建
   cmd.Connection=cn;
   cmd.CommandText=strSQL;

2.cmd=new SqlCommand(strSQL,cn);  //调用构造函数创建

3.cmd=cn.CreateCommand();   //使用SqlConnectiion对象的CreateCommand方法
   cmd.CommandText=strSQL;

二.执行查询 (基于SqlDataReader的操作方式)
cmd.ExecuteReader()  //返回一个SqlDataReader

读取方法:

A.读取几列值
SqlDataReader rdr=cmd.ExecuteReader();
while (rdr.Read())
    Console.WriteLin(“{0} {1} {2:d},rdr[“OrderID”],rdr[“CustomerID”],rdr[“OrderDate”]”);  //当存在可用列时,只需要调用SqlDataReader的索引器,并传递列的名称。SqlDataReader使用一般Object数据类型返回列的内容。
rdr.Close();

B.读取单一值
SqlDataReader rdr=cmd.ExecuteReader();
rdr.Read();
decimal decOrderTotal=(decimal)rdr[0];  //rdr[0] 表示检查第一行第一列的数据

以上语句可以用一句语句代替:

decimal decOrderTotal=(decimal)cmd.ExecuteScalar();

2.执行不返回结果集的查询

cmd.ExecuteNonQuery()

可根据ExecuteNonQuery()方法的返回值来判断执行的结果。

3.其它

使用Using块

using (SqlCommand cmd=new SqlCommand(strSQL,cn))

{

   try{

           using (SqlDatareader rdr=cmd.ExecuteReader())

            {

               while(rdr.read())

                       { …}

            }

       }

}

 

基于序号

int intcustomerIDOrdinal=rdr.GetOrdinal(“CustomerID”);

rdr[intcustomerIDOrdinal];

 

强类型getter

int intcustomerIDOrdinal=rdr.GetOrdinal(“CustomerID”);

rdr.GetString(intcustomerIDOrdinal)

应当总是使用适当的强类型getter,它们与结果集中列所返回的数据相对应,如果不能确定调用哪种类型getter,可以调用GetFieldType方法,传递需要的列的序号为参数。

处理Null值

在处理字符串内容之前,需确定该字符串已被初始化。
如果一个列的数据库值为Null,并且调用SqlDataReader的一个强类型getter(返回一个.NET数据类型如String,DataTime,Int32)则会产生一个SqlNullValueException.
string str;
if(str==null)
        空值出错提醒
else
        intLength=str.Length;

如果正在从一个可能包含Null值的列中获取数据,请在尝试访问前检查其值。

使用isDBNull方法(只接受一个表示列序号的整数)

while (rdr.Read())

{

   order=new Order()

   order.OrderID=rdr.GetInt32(0);

   …

   if(rdr.IsDBNull(3))

              order.ShippedDate=null;

   else

              order.ShippedDate=rdr.GetDateTime(3);

}