我想知道是否有人可以提供帮助?
我遇到一个SqlCommand对象的问题,当它执行一个没有返回记录的存储过程时,会超时。
存储过程并不复杂,它只是一种简单的SELECT ColumnA, ColumnB, ... FROM TableA WHERE Id = @Id
类型的东西。如果我在Sql Managment Studio中运行SP,则会快速返回。
但是,当我尝试执行命令以填充DataAdapter,或者从“立即窗口”手动执行命令时 - 一旦创建并填充参数,它将始终超时。
我使用SqlCommandBuilder的DeriveParameters()方法填充SqCommand参数,然后遍历集合并填充值。然后我将DataAdapter.SelectCommand设置为SqlCommand的引用并调用DataAdapter的填充方法。
对于任何返回数据的SP,代码似乎都能正常工作,但是当没有返回任何行时,代码就会无效。
有没有人经历过这个,并且能指出我正确的方向吗?
提前致谢, 问候, 杜安。
答案 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());