2010-08-19 165 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

相關問題