用Transaction 的 SqlCommand 类实例。

 初始化具有查询文本、SqlConnection 和 Transaction 的 SqlCommand 类实例,DATEREADER相关技巧

string conString  = "data source=127.0.0.1;Database=codematic;user id=sa;

        password=";

SqlConnection myConnection = new SqlConnection(conString );

string strSql = "update P_Product set Name='电脑4' where Id=52";

string strSql2 = "update P_Product set Name='数码4' where Id=53";

myConnection.Open();

SqlTransaction myTrans = myConnection.BeginTransaction();

SqlCommand myCommand = new SqlCommand(strSql, myConnection, myTrans);

try

{

    int rows = myCommand.ExecuteNonQuery();

    myCommand.CommandText = strSql2;

    rows = myCommand.ExecuteNonQuery();

    myTrans.Commit();

    myConnection.Close();

}

catch

{

    myTrans.Rollback();               

}

 

 

下面是一些使用DataReader获得最佳性能的技巧。

l         在使用带参数的Command前,必须关闭DataReader。

l         完成读数据之后一定要关闭DataReader。如果使用Connection只返回DataReader,那么关闭DataReader之后立刻关闭它。另外一个显式关闭Connection的方法是将CommandBehavior.CloseConnection传递给ExecuteReader方法,以确保关闭DataReader时相应的连接也被关闭。如果从一个方法返回DataReader,而且不能控制DataReader的相关连接的关闭,则这样做特别有用。

l         不能在层之间远程访问DataReader。DataReader是为已连接好的数据访问而设计的。

l         当访问列数据时,使用类型化访问器,例如GetString、GetInt32等。这使你不用将GetValue返回的Object强制转换成特定类型。

l         一个单一连接每次只能打开一个DataReader。如果想在相同的数据存储区上同时打开两个DataReader,则必须显式创建两个连接,每个DataReader一个。这是ADO.NET为池化连接的使用提供更多控制的一种方法。

l         在默认情况下,DataReader每次Read时都要将整行加载到内存。这允许在当前行内随机访问列。如果不需要这种随机访问,为了提高性能,则将CommandBehavior.SequentialAccess传递给ExecuteReader调用。这将DataReader的默认行为更改为仅在请求时将数据加载到内存。注意,CommandBehavior. SequentialAccess要求顺序访问返回的列。也就是说,一旦读过返回的列,就不能再读它的值了。

l         如果已经读取了来自DataReader的数据,但仍然有大量挂起的未读结果,则在关闭DataReader之前先要取消Command。因为取消Command可使服务器放弃这些结果,从而释放服务器的资源。

5.1.7  随用随关,释放资源

对于C#程序员来说,确保始终关闭Connection和DataReader对象的一个方便的方法就是使用using语句。using语句在离开自己的作用范围时,会自动调用被“使用”的对象的Dispose。例如:

string connectionString = "data source=127.0.0.1;Database=codematic;

user id=sa;password=";

using (SqlConnection myConnection = new SqlConnection(connectionString))

{

    SqlCommand cmd = myConnection.CreateCommand();

    cmd.CommandText = "SELECT * FROM P_Product";

    myConnection.Open();

    using (SqlDataReader dr = cmd.ExecuteReader())

    {

        while (dr.Read())

        {

            Response.Write(dr.GetInt32(0).ToString()+","+dr.GetString(1)+"<br>");

        }

}

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值