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);
}
}
应该是事务锁定的问题。conn1,(用于sda.fill(ds)的那个connection,代码中,找不到conn2),应该是对同一个表操作,所以select语句在等待Inesrt完成,因此timeout,可以尝试用在select语句中加入with(nolock),但是这样会读取没有commit的数据。
断点调试。。。
你懂的。。。
你的把 conn1.Close() 放到 trans.Commit(); 的后面.
cmd1.CommandTimeout=0就好了