.Net SQLCommand在执行不返回记录的存储过程时超时

时间:2010-08-19 09:40:11

标签: .net stored-procedures timeout sqlcommand dataadapter

我想知道是否有人可以提供帮助?

我遇到一个SqlCommand对象的问题,当它执行一个没有返回记录的存储过程时,会超时。

存储过程并不复杂,它只是一种简单的SELECT ColumnA, ColumnB, ... FROM TableA WHERE Id = @Id类型的东西。如果我在Sql Managment Studio中运行SP,则会快速返回。

但是,当我尝试执行命令以填充DataAdapter,或者从“立即窗口”手动执行命令时 - 一旦创建并填充参数,它将始终超时。

我使用SqlCommandBuilder的DeriveParameters()方法填充SqCommand参数,然后遍历集合并填充值。然后我将DataAdapter.SelectCommand设置为SqlCommand的引用并调用DataAdapter的填充方法。

对于任何返回数据的SP,代码似乎都能正常工作,但是当没有返回任何行时,代码就会无效。

有没有人经历过这个,并且能指出我正确的方向吗?

提前致谢, 问候, 杜安。

3 个答案:

答案 0 :(得分:1)

最后,事实证明代码的另一部分在我们正在阅读的记录上打开了一个事务。

与数据库的多个连接的原因是因为该项目当前使用ADO和ADO.Net(这是一个非常大的项目,目前正在从VB6转换为.Net。仍有很多遗留问题使用ADO进行数据访问)。 ADO连接使事务保持打开状态,并且在事务结束之前无法读取新的ADO.Net连接,这只会在ADO.Net命令超时并且抛出错误并且ADO事务回滚后才会发生! / p>

卫生署!

感谢所有阅读和思考解决方案的人。感谢Beth的建议。

此致 杜安。

答案 1 :(得分:0)

查找命令超时属性并将其值设置为零。

    Dim cmd As SqlCommand

    cmd = New SqlCommand
    cmd.CommandText = spName
    cmd.CommandType = CommandType.StoredProcedure
    cmd.Connection = _sqlConn
    cmd.CommandTimeout = 0

答案 2 :(得分:0)

com = new SqlCommand("insert1",con);

com.CommandType = System.Data.CommandType.StoredProcedure;

com.Parameters.Add("@eno",eno.Text);
com.Parameters.Add("@ename",ename.Text);
com.Parameters.Add("@sal",sal.Text);
Response.Write(com.ExecuteNonQuery().ToString());