2009-08-31 62 views
0

有沒有人有任何想法如何在企業庫數據訪問應用程序塊的動態查詢中使用count(*)?使用企業庫計數(*)

我使用:

Public Shared Function selectCount(ByVal code As String) As Integer 
    Dim query As String = "SELECT COUNT(*) " & _ 
          "FROM " & _ 
          "Data " & _ 
          "WHERE " & _ 
          "Code = '" & code & "'" 
    Dim db As Database = DatabaseFactory.CreateDatabase() 
    Return db.ExecuteScalar(System.Data.CommandType.Text, query) 
End Function 

這個錯誤被拋出:

的ITransactionLocal接口不被 'Microsoft.Jet.OLEDB.4.0' 提供支持。本地交易對於當前提供者不可用。

+0

其他查詢是否可用?使用相同的代碼只是沒有count()? – 2009-08-31 07:18:54

+0

我查了一下錯誤信息,發現通過向我的連接字符串中添加「OLE DB Services = -4」,在使用上面的代碼時清除了問題。 所以看起來我的代碼在技術上不是錯誤的,只是連接字符串的一些問題(雖然它以前工作正常!) – Andrew 2009-08-31 22:39:10

回答

0

我擡頭看了一下錯誤信息,發現通過向我的連接字符串中添加「OLE DB Services = -4」,在使用上面的代碼時清除了問題。所以看起來我的代碼在技術上不是錯誤的,只是連接字符串有問題(雖然以前工作正常!)

+0

爲什麼你創建並接受你自己的答案?爲什麼不接受研討會Alex的答案,這是正確的。 – 2009-09-19 09:15:23

+0

亞歷克斯的回答是正確的。但是,這不是我的問題的根源。我的實現也有效,但直到我將「OLE DB Service = -4」添加到連接字符串中,這就是爲什麼我創建了自己的答案,以防出於同樣的原因出現同樣的問題。如果人們覺得這不是正確的做法,我很樂意改變對Alex的答案。 – Andrew 2009-09-20 12:11:34

3

您是否嘗試過創建SQLCommand,然後使用Cmd。 ExecuteScalar

另外,您在查詢中使用了一個變量!這絕對需要一個參數化的SQLCommand來避免SQL代碼注入!如果你能保證安全與否,無所謂。最佳做法是始終使用參數。 (爲什麼?因爲另一位偷看代碼的開發人員將通過示例進行學習,並且您不希望他們學習不好的做法!)

您是否已嘗試向連接字符串中添加「OLE DB Services = -4」 ?我聽說這可能會解決這個交易錯誤。 :-)(好吧,我承認,我在閱讀你的評論後編輯了這個答案。) 無論如何,這個選項與數據庫的transactionenlistment有關。您通過添加此值來覆蓋設置。 (是的,我無恥地Google搜索了它。)看起來您的OLE DB服務已被修改,或者它們可能只是不同,因爲您在不同的系統上。

+0

你是絕對正確的。感謝您的建議;我將改變我現在使用的所有參數:D – Andrew 2009-08-31 22:40:16