2011-02-01 3 views
0

データアダプタを使用してアクセスデータベースからデータを取得しています(下記のコードを参照)。 AccessデータベースでSQLを実行すると、予想されるデータが得られます。しかし、コードをステップ実行すると、fillメソッドはテーブル定義だけを生成し、行は生成しません。C#OleDbDataAdapter.fillメソッドでデータまたはエラーが発生しない

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

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

`
公共ボイドGetQueries(データテーブルTSQL、文字列ツールは、文字列フィルタ、OleDbConnectionオブジェクトlConn REF) {OleDbDataAdapterおよdadapt =新しい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); 

    }` 

答えて

0

WHERE句で定義したフィルタは、特定の行でtrueと評価されますか?

なぜ文字列連結の代わりにパラメータを使用しないのですか? Active = Trueが本当に評価されると確信していますか?私が知る限り、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); 
+0

SQLが良いです:

では、なぜあなたはこのようにそれをしようとしないでください。私は最終的にそれを理解し、それは愚かなユーザーエラーだった:(それは、私はそのアプリケーションを更新していたと私は私の開発環境のコピーではないアクセスデータベースの生産コピーのデータを更新していた(doh !!!) –

関連する問題