La requête LIKE sur une base de données Access via C# renvoie toujours COUNT(*) sur 0
-
21-12-2019 - |
Question
Veuillez consulter le code suivant :
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();
}
Je reçois toujours 0 au lieu d'une valeur entière.Lors du débogage, je prends la requête et l'exécute dans MS ACCESS 2013, cela me donne un résultat correct.Je ne comprends pas quel est le problème.
La solution
Vous êtes dérangé par la différence de caractères génériques LIKE entre les requêtes exécutées dans Access lui-même et les requêtes exécutées à partir d'une application externe.
Lorsque vous exécutez une requête depuis Access lui-même, vous devez utiliser l’astérisque comme caractère générique : LIKE 'RT*'
.
Lorsque vous exécutez une requête à partir d'une application externe (comme votre application C#), vous devez utiliser le signe de pourcentage comme caractère générique : LIKE 'RT%'
.
Autres conseils
Essayer ExecuteScalar()
méthode
Remplacez ceci :
OleDbDataReader dr1 = qtc.ExecuteReader();
while (dr1.Read())
{
ttCnt = (int)dr1["Count"];
}
Avec ça:
ttCnt = Convert.ToInt32(qtc.ExecuteScalar());