更新了更直接的标题..
我遇到了在提交后立即查看我的交易中提交的数据的问题。
我接受来自用户输入的数据,以父表的形式将数据放入数据库(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;有提交,然后每个组分别拉出各个组。它是第二部分似乎没有看到与事务一起插入的记录......直到下一个事务被提交。
我今天早上做了一些测试,看看我是否可以确切地告知交易后记录的显示时间。