提交sql事务后无法立即看到数据

时间:2012-08-29 19:21:47

标签: c# sql-server-2005 transactions

更新了更直接的标题..

我遇到了在提交后立即查看我的交易中提交的数据的问题。

我接受来自用户输入的数据,以父表的形式将数据放入数据库(SQL Server 2005),该表具有多个具有1-many关系的子表。我正在使用一个事务并在完成后提交它。数据被提交给数据库,但是在提交之后我立即针对数据库运行了几个其他查询(仅SELECT语句)以查看是否已输入组的所有行。这些行可以由任何人随时输入,并且每个行都在他们自己的事务中。所以,说"组"在数据库中需要总共3行,我想提交我的事务,然后读取数据库以查看是否有任何组完成...包括我刚刚提交的事务的那些。

问题是显然在提交后回读数据并没有带回我刚刚提交的事务...如果这个事务是组中的最后一行,那么它会被读取错过并且没有&# 39; t return。

所以......

  • 交易开始。
  • 写行......
  • 交易提交..
  • 阅读是否存在完整的群组......
  • 未返回当前事务的组。其他完整的团体返回。

有一点需要注意,提交另一个事务将导致返回此数据...如果此新事务包含一行来完成另一个组,则不会返回新行...

这是我的代码..缩写...

SqlConnection sqlConn = getConn();  //getconn is a function that returns a connection object

String sqlSTR = "<<<MY INSERT STATEMENT>>>";
SqlTransaction trans = sqlConn.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted,"Trans");
SqlCommand sqlCMD;
try
{
    sqlCMD = new SqlCommand(sqlSTR, sqlConn, trans);

    //...Add all my data to the DB.

    trans.Commit();
catch (SqlException sqlErr)
{
    trans.Rollback("Trans");
    throw;
}
finally
{
    trans.Dispose();
}

接下来是一些代码来阅读数据库中寻找&#34;已完成的组&#34;但是这个数据属于的组,如果完成,则不返回。

存储数据......下次调用时,数据可由相同的代码检索..但不在此处。

它似乎需要时间来通过SQL提交事务,并且我的读取在SQL Server提交之前被调用...即使我将事务设置为允许读取未提交的数据

在转移到其他代码之前,有没有提交等待提交完成的提交?

我在提交后立即尝试对连接执行SELECT @@TRANCOUNT,但它始终返回0.

谢谢!

编辑:

public static SqlConnection getConn()
{
    try
    {
        string sqlStr = WebConfigurationManager.ConnectionStrings["conn_Main"].ConnectionString;

        SqlConnection sqlCN = new SqlConnection(sqlStr);
        sqlCN.Open();

        return sqlCN;
    }
    catch
    {
        throw;
    }
}

我在交易后使用存储过程读取记录......

在SP中,我使用的是一个基本的select语句,它可以执行几个连接,而不是先用其他方法来回退一个&#34;组的列表&#34;有提交,然后每个组分别拉出各个组。它是第二部分似乎没有看到与事务一起插入的记录......直到下一个事务被提交。

我今天早上做了一些测试,看看我是否可以确切地告知交易后记录的显示时间。

0 个答案:

没有答案