日期:2014-05-18  浏览次数:21070 次

事务级别形同虚设?
设置事务级别为 IsolationLevel.ReadUncommitted 但还是把目标表给锁了,无法查询。
谁能帮忙分析下?
C# code

                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
                    SqlTransaction tx = conn.BeginTransaction(IsolationLevel.ReadUncommitted);
                    cmd.Transaction = tx;
                    SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.Default, tx);
                    string sql = string.Empty;
                        for (int n = 0; n < listSql.Count; n++)
                        {
                            string strsql = listSql[n];
                            if (strsql.Trim().Length > 1)
                            {
                                cmd.CommandText = strsql;
                                sql = strsql;
                                cmd.ExecuteNonQuery();
                            }
                        }


                        sbc.DestinationTableName = tableName;
                        sbc.WriteToServer(dt);
                        tx.Commit();
                }



另外这段代码是在一个线程中执行。

------解决方案--------------------
你设置事务级别为 IsolationLevel.ReadUncommitted,只是在你的事物里可以脏读,既读取其它未提交事务. 不代表你的事务里更改后未提交不加锁,这样事务就没有意义了