问题描述
我该如何解决带有页面锁定问题的事务?
我的应用程序有问题,而客户端之一保存了订单文档.
在保存过程完成之前,另一个客户端无法从订单"表中选择数据.
我使用Microsoft SQL Server 2005 sp3开发C#窗口应用程序.
我使用Transaction and Isolation = ReadUncommit保存订单文档.
我的应用程序有3个表,分别是OrderHd,OrderLine和OrderSerial.
每1个订单文档的OrderSerial记录约1,000-5,000条记录
//我的模拟保存过程
string mstrConnStr =数据源= serverzx;初始目录=测试;用户ID = sa;密码= x2y2;";
System.Data.SqlClient.SqlConnection conn =新的SqlConnection(mstrConnStr);
System.Data.SqlClient.SqlCommand cmd1 =新的SqlCommand(插入到OrderHd(OrderID,Code,Name)值(@ Para0,@ Para1,@ Para2)",conn);
System.Data.SqlClient.SqlCommand cmd2 =新的SqlCommand(插入到OrderLine(OrderLineID,OrderID,Detail)值(@ Para0,@ Para1,@ Para2)",conn);
System.Data.SqlClient.SqlTransaction tr = null;
尝试
{
conn.Open();
cmd1.Parameters.Clear();
tr = conn.BeginTransaction(IsolationLevel.ReadUncommitted);
字符串strCode = DateTime.Now.ToString("yyyyMMdd:HHmmss");
字符串strHead = Guid.NewGuid().ToString();
cmd1.Transaction = tr;
cmd2.Transaction = tr;
cmd1.Parameters.Add("@ Para0",strHead);
cmd1.Parameters.Add("@ Para1",strCode);
cmd1.Parameters.Add("@ Para2",名称" + strCode);
cmd1.ExecuteNonQuery();
对于(int i = 0; i< 5000; i ++)
{
字符串strItem = Guid.NewGuid().ToString();
cmd2.Parameters.Clear();
cmd2.Parameters.Add("@ Para0",strItem);
cmd2.Parameters.Add("@ Para1",strHead);
cmd2.Parameters.Add("@ Para2",详细信息" + i.ToString());
cmd2.ExecuteNonQuery();
System.Threading.Thread.Sleep(10);
}
tr.Commit();
}
捕获(异常)
{
tr.Rollback();
MessageBox.Show(ex.Message);
}
终于
{
conn.Close();
}
How can I fix Transaction with Page Lock Ploblem ?
My Application has ploblem while one of client save Order Document.
Another client cannot select data from Order table until saving process is complete.
I develop C# window application with Microsoft SQL Server 2005 sp3.
I used Transaction and Isolation=ReadUncommit to save Order Document.
My Application has 3 table is OrderHd, OrderLine and OrderSerial.
Record of OrderSerial per 1 Order Document about 1,000-5,000 record
//My Simulate Saving Process
string mstrConnStr = "Data Source=serverzx; Initial Catalog=Test;User ID=sa;Password=x2y2;";
System.Data.SqlClient.SqlConnection conn = new SqlConnection(mstrConnStr);
System.Data.SqlClient.SqlCommand cmd1 = new SqlCommand("Insert Into OrderHd (OrderID , Code,Name) values (@Para0,@Para1,@Para2)",conn);
System.Data.SqlClient.SqlCommand cmd2 = new SqlCommand("Insert Into OrderLine (OrderLineID , OrderID,Detail) values (@Para0,@Para1,@Para2)",conn);
System.Data.SqlClient.SqlTransaction tr = null;
try
{
conn.Open();
cmd1.Parameters.Clear();
tr = conn.BeginTransaction(IsolationLevel.ReadUncommitted);
string strCode = DateTime.Now.ToString("yyyyMMdd : HHmmss");
string strHead = Guid.NewGuid().ToString();
cmd1.Transaction=tr;
cmd2.Transaction=tr;
cmd1.Parameters.Add("@Para0",strHead);
cmd1.Parameters.Add("@Para1",strCode);
cmd1.Parameters.Add("@Para2","Name "+strCode);
cmd1.ExecuteNonQuery();
for (int i=0;i<5000;i++)
{
string strItem = Guid.NewGuid().ToString();
cmd2.Parameters.Clear();
cmd2.Parameters.Add("@Para0",strItem);
cmd2.Parameters.Add("@Para1",strHead);
cmd2.Parameters.Add("@Para2","Detail "+i.ToString());
cmd2.ExecuteNonQuery();
System.Threading.Thread.Sleep(10);
}
tr.Commit();
}
catch (Exception ex)
{
tr.Rollback();
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
这篇关于如何使用“页面锁定问题"修复“交易"?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!