2010-08-19 149 views
0

我想知道是否有人可以提供帮助?.Net SQLCommand在执行存储过程时超时,它不返回任何记录

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

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

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

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

该代码似乎对任何返回数据的SP都能正常工作,但在没有行返回时会阻止该代码。

有没有人遇到过这种情况,请指点一下正确的方向吧?

在此先感谢, 关心, Duane。

+1

向我们展示您的代码将帮助我们给您一个答案。 – LukeH 2010-08-19 09:48:59

回答

0

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

Dim cmd As SqlCommand 

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

Hi Beth, 谢谢您的建议。在这种情况下,命令超时属性被设置为15秒,并且在SSMS中运行时的查询在眨眼间运行。只有在代码运行时才会超时。 – Dib 2010-08-21 07:51:46

1

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

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

Doh!

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

Regards, Duane。

+0

好的。 :)感谢您发布您的解决方案。我在一次交易中修改了SP,并且DeriveParameters本身超时。 – Jonathan 2013-07-09 14:14:17

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()); 
+1

欢迎来到SO。请在你的答案中解释你的代码。 – Tim 2012-11-08 08:46:56

相关问题