LIKE запрос к базе данных Access через C# всегда возвращает COUNT(*) из 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, он дает мне правильный результат. Я не понимаю, в чем проблема.
2 ответа
Решение
Вас сбивает с толку различие в подстановочных знаках LIKE между запросами, выполняемыми в самом Access, и запросами, выполняемыми из внешнего приложения.
При выполнении запроса из самого Access вам необходимо использовать звездочку в качестве символа подстановки: LIKE 'RT*'
,
При выполнении запроса из внешнего приложения (например, приложения C#) необходимо использовать знак процента в качестве подстановочного знака: LIKE 'RT%'
,
Пытаться ExecuteScalar()
метод
Заменить это:
OleDbDataReader dr1 = qtc.ExecuteReader();
while (dr1.Read())
{
ttCnt = (int)dr1["Count"];
}
С этим:
ttCnt = Convert.ToInt32(qtc.ExecuteScalar());