此 SqlTransaction 已完成;它再也无法使用。

chen3002min 2012-05-10 07:21:57

public static bool InStock(SqlParameter[] OrderParas, List<SqlParameter[]> InStockParas, DataTable DetailTable)
{
bool _pass = false;
string connectString = Encrypt.DecryptString(System.Configuration.ConfigurationManager.AppSettings["ConnetString"]);
using (SqlConnection Conn = new SqlConnection(connectString))
{
Conn.Open();

using (SqlTransaction Tran = Conn.BeginTransaction())
{
try
{
using (SqlCommand Comm = new SqlCommand())
{
Comm.Transaction = Tran;
Comm.Connection = Conn;
Comm.CommandType = CommandType.StoredProcedure;

Comm.CommandText = "p_OutOrderStateUpdate_Update";
Comm.Parameters.AddRange(OrderParas);
Comm.ExecuteNonQuery();

Comm.CommandText = "p_ProductsInStorage_Insert";

for (int j = 0; j < InStockParas.Count; j++)
{
Comm.Parameters.Clear();
Comm.Parameters.AddRange(InStockParas[j]);
Comm.ExecuteNonQuery();
}
}

using (SqlBulkCopy copy = new SqlBulkCopy(Conn, SqlBulkCopyOptions.CheckConstraints, Tran) { DestinationTableName = "tbInStockDetail" })
{
for (int i = 0; i < DetailTable.Columns.Count; i++)
{
copy.ColumnMappings.Add(DetailTable.Columns[i].ColumnName, DetailTable.Columns[i].ColumnName);
}
copy.WriteToServer(DetailTable);
}
Tran.Commit();
_pass = true;
}
catch (Exception ex)
{
Tran.Rollback();
throw new Exception(ex.ToString());
}
}
}
return _pass;
}


在copy.WriteToServer(DetailTable);时跳到catch

错误是"在从服务器接收结果时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 指定的网络名不再可用。)"

然后,Tran.Rollback();提示此 SqlTransaction 已完成;它再也无法使用。

不知是不是网络问题,ping服务器ip基本没有掉包和能查询

请问应该怎么解决呢...
...全文
795 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
机器人 2012-05-11
  • 打赏
  • 举报
回复
我看是 using (SqlBulkCopy copy = new SqlBulkCopy(Conn, SqlBulkCopyOptions.CheckConstraints, Tran)

的事,它在Exception的时候,先关闭了 Transcation

这里你完全可以把最后的清理工作放到 finally 里去做。
  • 打赏
  • 举报
回复
你都使用using(){ }了,还些无聊的try...catch干什么呢?人家的using本来就负责清理tran的。如果闲它清理不了,要么你就把using删除吧。
test2050 2012-05-10
  • 打赏
  • 举报
回复
像是网络问题哦,这个问题还经常出现吗,还是几乎很少或者无法重现。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧