首页 新闻 搜索 专区 学院

执行下面代码会有超时异常?

0
悬赏园豆:20 [已解决问题] 解决于 2010-11-25 12:39

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["textconnstring"].ToString()))
{
if (conn.State == ConnectionState.Closed)
conn.Open();
SqlTransaction trans
= conn.BeginTransaction(IsolationLevel.ReadUncommitted);

try
{

SqlCommand cmd
= new SqlCommand();
cmd.Connection
= conn;
cmd.CommandText
= sqlStr1;
cmd.Transaction
= trans;
cmd.ExecuteNonQuery();
cmd.CommandText
= sqlStr2;
cmd.Transaction
= trans;
cmd.ExecuteNonQuery();

using (SqlConnection conn1 = new SqlConnection(ConfigurationManager.ConnectionStrings["textconnstring"].ToString()))
{
SqlCommand cmd1
= new SqlCommand(sqlStr, conn1);
SqlDataAdapter sda
= new SqlDataAdapter(cmd1);
DataSet ds
=new DataSet();
sda.Fill(ds);
}
trans.Commit();

}
catch(SqlException ex)
{
trans.Rollback();
Console.WriteLine(ex.Message);
}
}
其中sqlStr1和 sqlStr2为插入语句,sqlStr为查询语句。conn和conn2是两个不同的连接,但是在执行时到了“sda.Fill(ds)”时程序会卡住,然后就是超时错误了,不知是什么原因?

Will Zh的主页 Will Zh | 菜鸟二级 | 园豆:205
提问于:2010-11-25 00:04
< >
分享
最佳答案
0

应该是事务锁定的问题。conn1,(用于sda.fill(ds)的那个connection,代码中,找不到conn2),应该是对同一个表操作,所以select语句在等待Inesrt完成,因此timeout,可以尝试用在select语句中加入with(nolock),但是这样会读取没有commit的数据。

收获园豆:20
沉默的糕点 | 小虾三级 |园豆:1786 | 2010-11-25 01:05
其他回答(3)
0

断点调试。。。

你懂的。。。

Tester Chen | 园豆:1690 (小虾三级) | 2010-11-25 08:07
0

你的把 conn1.Close() 放到 trans.Commit(); 的后面.

Launcher | 园豆:45045 (高人七级) | 2010-11-25 08:58
0

cmd1.CommandTimeout=0就好了

茂茂 | 园豆:2892 (老鸟四级) | 2010-11-25 09:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册