COMO consulta em um banco de dados do Access através de C# devolve sempre COUNT(*) de 0
-
21-12-2019 - |
Pergunta
Por favor de uma olhada no código a seguir:
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();
}
Eu estou sempre chegando de contagem como 0 em vez de algum valor inteiro.Durante a depuração de eu tomar a consulta e executar no MS ACCESS 2013, ele me dá o resultado correto.Eu não estou conseguindo o que é o problema.
Solução
Você está recebendo tropeçou pela diferença em COMO caracteres curinga entre consultas executadas no próprio Acesso e consultas executadas a partir de uma aplicação externa.
Quando executar uma consulta a partir de dentro do próprio Access, você precisa usar o asterisco como um caractere curinga: LIKE 'RT*'
.
Quando executar uma consulta a partir de uma aplicação externa (como o C# app), você precisa usar o sinal de porcentagem como o caractere curinga: LIKE 'RT%'
.
Outras dicas
Tente ExecuteScalar()
método
Substituir Esta:
OleDbDataReader dr1 = qtc.ExecuteReader();
while (dr1.Read())
{
ttCnt = (int)dr1["Count"];
}
Com Este:
ttCnt = Convert.ToInt32(qtc.ExecuteScalar());