C #을 통한 Access 데이터베이스의 쿼리와 마찬가지로 Count (*)를 항상 반환합니다.

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