2

次のコードを調べてください。

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 で実行すると、正しい結果が得られます。何が問題なのかわかりません。

4

2 に答える 2

4

Access 自体で実行されるクエリと外部アプリケーションから実行されるクエリとの間の LIKE ワイルドカード文字の違いにつまずきます。

Access 自体からクエリを実行する場合は、アスタリスクをワイルドカード文字として使用する必要があります: LIKE 'RT*'.

外部アプリケーション (C# アプリなど) からクエリを実行する場合は、パーセント記号をワイルドカード文字として使用する必要があります: LIKE 'RT%'.

于 2014-01-09T09:52:53.267 に答える
0

ExecuteScalar()方法を試す

これを置き換えます:

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

これとともに:

 ttCnt = Convert.ToInt32(qtc.ExecuteScalar());
于 2014-01-09T09:32:33.497 に答える