استعلام LIKE في قاعدة بيانات Access عبر C# يُرجع دائمًا COUNT(*) من 0

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 بين الاستعلامات التي يتم تشغيلها في Access نفسه والاستعلامات التي يتم تشغيلها من تطبيق خارجي.

عند تشغيل استعلام من داخل Access نفسه، فإنك تحتاج إلى استخدام العلامة النجمية كحرف بدل: 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