.Net SQLCommand在执行存储过程时超时,它不返回任何记录
我想知道是否有人可以提供帮助?.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。
查找命令超时属性并将其值设置为零。
Dim cmd As SqlCommand
cmd = New SqlCommand
cmd.CommandText = spName
cmd.CommandType = CommandType.StoredProcedure
cmd.Connection = _sqlConn
cmd.CommandTimeout = 0
Hi Beth, 谢谢您的建议。在这种情况下,命令超时属性被设置为15秒,并且在SSMS中运行时的查询在眨眼间运行。只有在代码运行时才会超时。 – Dib 2010-08-21 07:51:46
最后发现代码的另一部分在我们正在阅读的记录上打开了一个事务。
多个连接到数据库的原因是因为该项目目前使用ADO和ADO.Net(这是一个非常大的项目,目前正在从VB6转换到.Net。还有很多使用ADO传统数据访问)。 ADO连接使事务保持打开状态,并且新的ADO.Net连接在事务结束之前无法读取,只有在ADO.Net命令超时并且抛出错误并且ADO事务回滚之后才会发生这种连接!
Doh!
感谢所有阅读和思考解决方案的人。感谢贝丝的建议。
Regards, Duane。
好的。 :)感谢您发布您的解决方案。我在一次交易中修改了SP,并且DeriveParameters本身超时。 – Jonathan 2013-07-09 14:14:17
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());
欢迎来到SO。请在你的答案中解释你的代码。 – Tim 2012-11-08 08:46:56
向我们展示您的代码将帮助我们给您一个答案。 – LukeH 2010-08-19 09:48:59