【发布时间】:2017-04-06 12:50:28
【问题描述】:
我想创建部分有序并行SqlCommand 队列,但我不确定一件事。
我需要考虑SqlCommand失败的情况,需要重新执行。
考虑以下代码:
SqlCommand myCommand = new SqlCommand();
myCommand.Parameters.AddWithValue("adsf", someVal);
myCommand.CommandType = CommandType.StoredProcedure;
while(myCommand.ExecuteNonQuery() <= 0) {
log fail;
wait some time;
}
将SqlCommand 在正确的状态所有尝试?或者我应该总是创建新的SqlCommand 并用相同的参数填充它?
【问题讨论】:
-
如果您要传递的参数没有任何变化并且sql连接也仍然打开,您可以重新执行
ExecuteNonQuery方法。 -
命令对象的状态会很好。数据库状态,不一定如此。
-
您介意描述一下
partially ordered parallel SqlCommand queue吗? -
只有当语句类型为
select或发生回滚时,ExecuteNonQuery的返回值为-1。所以while(myCommand.ExecuteNonQuery() <= 0)没有检查SqlCommand是否失败。在此处阅读更多信息stackoverflow.com/a/38060528/2946329 -
这会产生无限循环,您至少应该添加一个计数器。您应该检查@RETURN_VALUE 而不是
ExecuteNonQuery()的结果。
标签: c# sql sqlcommand