2012-03-27 15 views
4

から実行したときにMS Accessデータベースの動作が異常に奇妙になりました。 MS Accessのクエリに "like"ステートメントが含まれていると、結果がOledbに返されないようです。誰かがこれを解決する方法を知っていれば、私は非常に感謝します。 C#コード:MS Accessで実行されたクエリをC#

DataTable GetAccessData(string FileName, string Password) 
    { 
     Query = "select * from [qry_1]"; 
     DataTable DT = access2dt 
      (
      FileName,Password,Query); 

     MessageBox.Show(Query); 
     if (DT == null || DT.Rows.Count <= 1) throw new Exception("Data not found"); 
     else return DT; 
    } 

public static DataTable access2dt(string filename, string password, string query) 
{ 
    string conString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Jet OLEDB:Database Password=" + password; 
    OleDbConnection mycon; 
    mycon = new OleDbConnection(conString); 

    if (mycon.State == ConnectionState.Closed) 
    { 
     mycon.Open(); 
    } 
    try 
    { 
     OleDbCommand accessCommand = new OleDbCommand(); 
     System.Data.DataTable dt = new System.Data.DataTable(); 
     accessCommand = new OleDbCommand(query, mycon); 

     using (OleDbDataReader myReader = accessCommand.ExecuteReader()) 
     { 
      DataTable myTable = new DataTable(); 
      myTable.Load(myReader); 
      return myTable; 
     } 
    } 
    finally 
    { 
     mycon.Close(); 
    } 

} 

そして[qry_1] MS Accessデータベースに保存されたクエリは次のようになります。

SELECT tbl_MAPPING_GICM_AoA.[Type of expense] 
FROM tbl_USGAAP_ALL_TRANS, tbl_MAPPING_GICM_AoA 
WHERE tbl_USGAAP_ALL_TRANS.[Account]=[tbl_MAPPING_GICM_AoA].[Natural Account] 
AND tbl_USGAAP_ALL_TRANS.[Created By] NOT IN (SELECT [Created by/User ID] FROM tbl_GICM_AoA_EXCL_FACTOR1) 
AND tbl_USGAAP_ALL_TRANS.[Je Source] NOT IN (SELECT [JE SOURCE] FROM tbl_GICM_AoA_EXCL_FACTOR2) 
AND tbl_USGAAP_ALL_TRANS.[Je Category] NOT IN (SELECT [JE CATEGORY] FROM tbl_GICM_AoA_EXCL_FACTOR3) 
AND (tbl_USGAAP_ALL_TRANS.[Account] LIKE '4*' OR tbl_USGAAP_ALL_TRANS.[Account] LIKE '5*' OR tbl_USGAAP_ALL_TRANS.[Account] LIKE '6*') 

を私はAccessで、それを実行するときに、それはうまく動作しますが、私はC#からこのクエリを呼び出すとき私は "データが見つかりません"例外を取得します。クエリで最後の文字列(LIKE付き)を削除すると、すべてが機能し始めます。

答えて

6

ワイルドカード文字を置き換えてみてください。アクセスは '*'を使用しますが、OLEDBを使用する場合は、ワイルドカードとして '%'を使用する必要があります。

+0

これは機能しました。今ではクエリはAccessでは動作しませんが、それほど気にしません。ありがとうございました! – Vadim

+0

@ Vadimようこそ。 –

関連する問題