簡體   English   中英

通過C#對Access數據庫進行的LIKE查詢始終返回COUNT(*)為0

[英]LIKE query on an Access database via C# always returns COUNT(*) of 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中執行,它為我提供了正確的結果。 我沒有得到什么問題。

在Access本身中運行的查詢與從外部應用程序運行的查詢之間,LIKE通配符之間的差異使您大跌眼鏡。

從Access本身運行查詢時,需要使用星號作為通配符: LIKE 'RT*'

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

嘗試ExecuteScalar()方法

替換為:

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

有了這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM