Как запрос на базу данных доступа через C # всегда возвращает счет (*) из 0

StackOverflow https://stackoverflow.com//questions/21016044

Вопрос

Пожалуйста, посмотрите следующий код:

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());
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top