2014-01-09 75 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