【发布时间】:2014-10-01 01:55:27
【问题描述】:
当我调试存储过程时它可以工作,但我的 C# 代码在执行相同的存储过程时挂起 vai Command.ExecuteNonQuery();
当它卡住时,我也无法在相应的表上使用 select 命令。
请大家帮我看看为什么我的Command.ExecuteNonQuery(); 挂了。
这里是一些代码sn-ps
using (command = manager.CreateStoredProcCommandWrapper(
"UpdatePayrollStagingWithTaxYearID",
new Object[] { HttpContext.Current.Session.SessionID, taxyearID }))
{
manager.ExecuteNonQuery(command);
}
public void ExecuteNonQuery(NTTGDBCommandWrapper commandWrapper)
{
NTTGArgumentValidation.CheckForNullReference(commandWrapper, "commandWrapper");
Stack trans = GetTransactions();
if (trans.Count > 0)
{
GetDatabase().ExecuteNonQuery(commandWrapper.InnerCommand, (IDbTransaction)trans.Peek());
}
else
{
GetDatabase().ExecuteNonQuery(commandWrapper.InnerCommand);
}
}
protected Stack GetTransactions()
{
Stack transactionStack = (Stack)CallContext.GetData(this._contextIdentifierForTransactions);
if (transactionStack == null)
{
transactionStack = new Stack();
CallContext.SetData(this._contextIdentifierForTransactions, transactionStack);
}
return (transactionStack);
}
public virtual void ExecuteNonQuery(DBCommandWrapper command, IDbTransaction transaction)
{
PrepareCommand(command, transaction);
DoExecuteNonQuery(command);
}
private void DoExecuteNonQuery(DBCommandWrapper command)
{
try
{
DateTime startTime = DateTime.Now;
command.RowsAffected = command.Command.ExecuteNonQuery();
this.instrumentation.CommandExecuted(startTime);
}
catch
{
this.instrumentation.CommandFailed(command.Command.CommandText, ConnectionStringNoCredentials);
throw;
}
}
【问题讨论】:
-
你能发布你的数据访问代码和sql吗?只是说
Command.ExecuteNonQuery()挂起是没有用的。 -
您是否尝试在从 C# 进行测试时运行 SQL 分析器以查看您的 sql server 上实际执行的命令?
-
是的,我用 Sql Profiler 试过了,它是正确的。
-
您是否检查过 sp_who2 以确保您的进程没有被锁定表的另一个进程阻塞?
-
即使进行了编辑,我们也看不到参数是如何附加到 sp 调用的。
标签: c# sql-server-2008