在使用TransactionScope时 出错。(如果不使用事务则不出错)
以下是使用TransactionScope 这个的测试代码一周了,问题仍然没有解决,希望大家指教。
应用程序服务器与数据库服务器分别在不同的机器上。
string connectionString = @"Data Source=server\sql2005;Initial Catalog=DataTest;User ID=sa;Password=123456;enlist=true";
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
SqlParameter[] parameters =
{
new SqlParameter("@UserName", SqlDbType.NVarChar,50),
new SqlParameter("@Fund", SqlDbType.Money)
};
parameters[0].Value = "admin";
parameters[1].Value = 12.0;
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "User_UpdateFund";
cmd.Parameters.AddRange(parameters);
conn.Open();
cmd.ExecuteNonQuery();
}
using (SqlConnection conn1 = new SqlConnection(connectionString))
{
SqlParameter[] parameters1 =
{
new SqlParameter("@From", SqlDbType.NVarChar,50),
new SqlParameter("@To",SqlDbType.NVarChar,50),
new SqlParameter("@Fund", SqlDbType.Money)
};
parameters1[0].Value = "admin";
parameters1[1].Value = "agent";
parameters1[2].Value = 12.0;
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn1;
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.CommandText = "FundLog_Add";
cmd1.Parameters.AddRange(parameters1);
conn1.Open();
cmd1.ExecuteNonQuery();
}
ts.Complete();
以下是使用TransactionScope 这个的测试代码一周了,问题仍然没有解决,希望大家指教。
应用程序服务器与数据库服务器分别在不同的机器上。
string connectionString = @"Data Source=server\sql2005;Initial Catalog=DataTest;User ID=sa;Password=123456;enlist=true";
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.RequiresNew))
{
SqlParameter[] parameters =
{
new SqlParameter("@UserName", SqlDbType.NVarChar,50),
new SqlParameter("@Fund", SqlDbType.Money)
};
parameters[0].Value = "admin";
parameters[1].Value = 12.0;
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "User_UpdateFund";
cmd.Parameters.AddRange(parameters);
conn.Open();
cmd.ExecuteNonQuery();
}
using (SqlConnection conn1 = new SqlConnection(connectionString))
{
SqlParameter[] parameters1 =
{
new SqlParameter("@From", SqlDbType.NVarChar,50),
new SqlParameter("@To",SqlDbType.NVarChar,50),
new SqlParameter("@Fund", SqlDbType.Money)
};
parameters1[0].Value = "admin";
parameters1[1].Value = "agent";
parameters1[2].Value = 12.0;
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn1;
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.CommandText = "FundLog_Add";
cmd1.Parameters.AddRange(parameters1);
conn1.Open();
cmd1.ExecuteNonQuery();
}
ts.Complete();
控制面板/管理工具/组件服务/计算机/我的电脑/右键属性/MSDTC/安全性配置,在这个对话框里把你觉得需要的都勾起来。第二个问题很容易被忽视,就是防火墙设置,如果你用的是Windows自带的防火墙,把%systemroot%\system32\msdtc.exe加入例外就可以了。关于MSDTC和防火墙的问题,请参阅下面的文章:
http://support.microsoft.com/default.aspx/kb/306843/en-us
防火墙设置:这个问题我注意了的,我关闭了防火墙的,我还禁用过防火墙来调试,问题仍然没有解决。
问题最可能是出在MSDTC的配置问题,但是那个的那几个选择,基本是都试过。郁闷啊!
我给你的链接里面有代码
我给你的链接里面有代码
我看了那个代码,实际上他的哪个仍然是一个Connection,只是他做了封装,使用起来更方便。这样问题基本上能够解决,但是我在想,是不是用了两个不同的Connection就不能使用了呢?
还争什么 连接字符串的问题。。!!
还争什么 连接字符串的问题。。!!
那你说说连接字符串错在哪儿了?连接数据库两次自动就把你的连接提升到DTC了,不开DTC当然会出错,我的DTC是开起了的。我使用那个Dping工具测试,已经通过了的。
MSDTC可以管理多个conn,我看你的代码里似乎没有关闭连接,不知道会不会是这个问题,建议检查一下。
这句就是关闭连接。
http://msdn2.microsoft.com/zh-cn/library/system.transactions.transactionscope(VS.80).aspx