C#を介したアクセスデータベース上のクエリのように、常に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でクエリを実行して実行します。正しい結果を与えます。問題は何ですか?

役に立ちましたか?

解決

アクセス自体で実行されているクエリ間の違いと外部アプリケーションから実行されるクエリの間の違いの違いによってトリップアップしています。

アクセス自体内からクエリを実行するときは、ワイルドカード文字としてアスタリスクを使用する必要があります。

外部アプリケーションからクエリを実行するとき(C#Appのように)ワイルドカード文字としてパーセント記号を使用する必要があります。

他のヒント

ExecuteScalar()メソッド

これを置換する:

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

これで:

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top