Me gusta la consulta en una base de datos de acceso a través de C # siempre devuelve el conteo (*) de 0

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

Pregunta

Por favor, consulte el código siguiente:

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

Siempre estoy recibiendo cuenta como 0 en lugar de un valor entero.Si bien la depuración, tomo la consulta y se ejecuta en MS Access 2013, me da un resultado correcto.No estoy recibiendo cuál es el problema.

¿Fue útil?

Solución

Se está volviendo tropezando por la diferencia en los caracteres de comodín similares entre las consultas que se ejecutan en el acceso y las consultas que se ejecutan desde una aplicación externa.

Al ejecutar una consulta desde el acceso a sí mismo, debe usar el asterisco como el carácter comodín: LIKE 'RT*'.

Al ejecutar una consulta de una aplicación externa (como su aplicación C #), debe usar el signo de porcentaje como el carácter comodín: LIKE 'RT%'.

Otros consejos

Pruebe el método ExecuteScalar()

Reemplazar esto:

 OleDbDataReader dr1 = qtc.ExecuteReader();
 while (dr1.Read())
 {
    ttCnt = (int)dr1["Count"];
 }

con esto:

 ttCnt = Convert.ToInt32(qtc.ExecuteScalar());

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top