2014-01-09 76 views
2

COUNT(*)請看看下面的代碼:LIKE查詢總是返回0

using (OleDbConnection openCon = new OleDbConnection(ConfigurationManager.AppSettings["AccessConnectioString"])) 
{ 
       openCon.Open(); 
       string tc = string.Empty; 
       string ttc = string.Empty; 
       if (!string.IsNullOrEmpty(QSetId)) 
       { 
        tc = "select count(*) as [Count] from ABC where QSetId = @qSetId and TText like 'RT*'"; 
       } 
       else 
       { 
        tc = "select count(*) as [Count] from PQR where TText like 'RT*'"; 
       } 
       using (OleDbCommand qtc= new OleDbCommand(tc)) 
       { 
        qtc.Connection = openCon; 
        if (!string.IsNullOrEmpty(QSetId)) 
         qtc.Parameters.Add("@qSetId", OleDbType.VarChar).Value = QSetId; 
        OleDbDataReader dr1 = qtc.ExecuteReader(); 
        while (dr1.Read()) 
        { 
         ttCnt = (int)dr1["Count"]; 
        } 
       } 

       openCon.Close(); 
} 

我總是得到數爲0,而不是某個整數值。在調試時,我將查詢並在MS ACCESS 2013中執行,它給了我正確的結果。我沒有得到什麼問題。

+0

您可能想先閱讀手冊。 http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter(v=vs.110).aspx * OLE DB.NET框架數據提供程序使用標記爲問題的位置參數標記(?)而不是命名參數。*如果您從不使用它,設置「getTotalTweetCount」有什麼意義? 'OleDbDataReader'實現'IDisposable',但你永遠不會調用Dispose。等等。 –

+0

@ ta.speot.is謝謝你的回覆,'AccessConnectioString'不是拼寫錯誤,'getTotalTweetCount'不存在,'tc'(我編輯過),@工作正常,它也被取代具有適當的價值。我不認爲@正在創造問題,因爲我在其他程序及其工作中使用相同的東西。 – user3030342

回答

3

你正在通過訪問本身運行的查詢之間的LIKE通配符的區別不慎查詢從外部應用程序運行。

從Access內部運行查詢時,您需要使用星號作爲通配符:LIKE 'RT*'

從外部應用程序(如C#應用程序)運行查詢時,需要使用百分號作爲通配符:LIKE 'RT%'

+0

優秀的人。非常感謝 :) – user3030342

0

嘗試ExecuteScalar()方法

替換此:

OleDbDataReader dr1 = qtc.ExecuteReader(); 
while (dr1.Read()) 
{ 
    ttCnt = (int)dr1["Count"]; 
} 

這一點:

ttCnt = Convert.ToInt32(qtc.ExecuteScalar()); 
+0

已經嘗試過,但它不工作,即使在QuickWatch dr1 [「Count」];給出的值爲0. – user3030342

+0

@ user3030342:你確定查詢返回的是零以外的整數嗎? –

+0

Ofcourse人,即使我在運行時使用斷點檢查它,複製變量中的最後一個查詢,並在ms訪問sql視圖中執行它,它給了我沒有行。 – user3030342