0

データ アダプターを使用して、アクセス データベースからデータを取得しています (以下のコードを参照)。Access データベースで SQL を実行すると、期待どおりのデータが得られます。ただし、コードをステップ実行すると、fill メソッドはテーブル定義のみを生成し、行は生成しません。

私は過去にこの手順を何度も使用してきましたが、それらの呼び出しでも引き続き機能します。

アクセス中の SQL は正しいデータを返します。C# ではエラー メッセージは表示されませんが、データも取得されません。誰もこれを前に見たことがありますか?

`
public void GetQueries(ref DataTable tSQL, String tool, string Filter, OleDbConnection lConn) { OleDbDataAdapter dadapt = new OleDbDataAdapter(); //アクセス文字列のデータ アダプタ lSQL = "";

        //assign the connection to the processing mdb
        //lAccProcSQL.Connection = lConn;

        //Pull the queries to be executed
        lSQL = "SELECT * FROM tblSQL WHERE Active = TRUE AND ToolCode = '" +
            tool + "' and type not in (" + Filter + ") ORDER BY QueryNum";

        //Set the adapter to point to the tblSQL table
        dadapt = new OleDbDataAdapter(lSQL, lConn);

        //clear tables in case of rerun
        tSQL.Clear();

        //Fill working queries data table
        dadapt.Fill(tSQL);

    }`
4

1 に答える 1

0

WHERE 句で定義したフィルターが特定の行で true と評価されることを確信していますか?

文字列連結の代わりにパラメーターを使用しないのはなぜですか? Active = Truetrue と評価されますか? 私の知る限り、True は Access では -1 で表されます。

では、次のように試してみませんか。

var command = new OleDbCommand();
command.Connection = lConn;
command.CommandText = "SELECT * FROM tblSql WHERE Active = -1 AND ToolCode = @p_toolCode AND type NOT IN (" + filter + ") ORDER BY querynum";
command.Parameters.Add ("@p_toolCode", OleDbType.String).Value = tool;
datapt = new OleDbDataAdapter();
datapt.SelectCommand = command;
dadapt.Fill (tSql);
于 2011-02-01T18:58:19.007 に答える