2015-03-13 109 views
0

非常感謝您爲我的應用程序中的一個錯誤提供一些幫助,這些錯誤令我困惑!SQL SELECT COUNT(*)有時會返回數據

我檢查中包含的人的,將personId我期待了使用表格的行數:

cmd.commandtext = "SELECT Count (*) from PeopleDetails where PersonID = '11111'" 
count = cmd.executescalar() 

這個工程的98%的時間。 偶爾計數變量有被查詢的行的第一列的數據,這是表中稱爲rowid的GUID。它沒有滿足條件的行數的預期整數。連接處於活動狀態,如果查詢重複,則返回正確的計數值。

當服務器是早上最繁忙的第一件事情時,對數據庫有多個同時查詢時,可以看到這種情況。

最受歡迎的幫助!

SQL server 2003,vb.net

感謝您的期待!

+0

你有沒有其他的SQL語句在相同的方法,cmd.commandtext可能返回第一列? – Adil 2015-03-13 12:56:15

+3

這不是你的真實代碼。你如何傳遞PersonID值?還有其他幾行代碼與db進行交互?請顯示更多的上下文。有了這麼幾行代碼,就沒有可能獲得記錄的行爲 – Steve 2015-03-13 13:00:41

+0

您是否爲每個命令創建了一個新的'SqlConnection'?這看起來像你正在重複使用來自多個線程的相同的'SqlConnection'。 – Luaan 2015-03-13 13:07:17

回答

1

您是否爲每個命令創建了新的SqlConnection?這看起來像你從多個線程重複使用相同的SqlConnection

SqlConnection/SqlCommand不是線程安全的,所以你真的想避免從不同線程同時使用它。一般來說,不要害怕爲你發送的每個命令創建一個新的SqlConnection(或者至少對於給定的方法範圍)。啓用連接池後,它幾乎可以自由地這樣做,並且可以爲併發問題節省很多的損失。