Come query su un database di accesso tramite C # restituisce sempre il conteggio (*) di 0
-
21-12-2019 - |
Domanda
Si prega di esaminare il seguente codice:
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();
}
.
Sto sempre contando come 0 invece di qualche valore intero.Durante il debug, prendo la query ed esegui in MS Access 2013, mi dà il risultato corretto.Non sto ottenendo qual è il problema.
Soluzione
Si tira inciampati dalla differenza in caratteri jolly come le query eseguite nell'accesso stesso e le query eseguono da un'applicazione esterna.
Quando si esegue una query dall'interno dell'accesso stesso è necessario utilizzare l'asterisco come carattere jolly: LIKE 'RT*'
.
Quando si esegue una query da un'applicazione esterna (come la tua app C #) è necessario utilizzare il segno percentuale come carattere jolly: LIKE 'RT%'
.
Altri suggerimenti
Prova il metodo ExecuteScalar()
Sostituisci questo:
OleDbDataReader dr1 = qtc.ExecuteReader();
while (dr1.Read())
{
ttCnt = (int)dr1["Count"];
}
.
Con questo:
ttCnt = Convert.ToInt32(qtc.ExecuteScalar());
.