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