2017-11-15 250 views
0

IErrorInfo.GetDescriptionがE_FAIL(0x80004005)で失敗しました。 そして、どういう意味でこの問題を解決するのか分かりません。私はcoppyと私のAcces - dbに貼り付けるクエリを貼り付けると、それは魅力のように動作しますが、私はしようとするときにC#で私はこのエラーが発生します。IErrorInfo.GetDescriptionがE_FAIL(0x80004005)で失敗しました。C#

パラメータはすべて適切な値で埋められます。

@aankomst = 15-11-2017, @vertrek = 20-11-2017, @grootte = "large" 

    try 
    { 
     standplaatslijst.Clear(); 
     verbinding = new OleDbConnection(
     @"Provider=Microsoft.ACE.OLEDB.12.0; 
     Data Source=..\..\..\La_Rustique.accdb; 
     Persist Security Info=False;"); 
     verbinding.Open(); 

     OleDbCommand query = new OleDbCommand(); 
     OleDbDataReader lezer = null; 
     query.CommandText = @"SELECT * 
           FROM standplaats 
           WHERE id not in (SELECT standplaats_id 
           FROM reservering 
           WHERE @aankomst BETWEEN aankomst AND vertrek 
           AND @vertrek BETWEEN aankomst AND vertrek) 
           AND size = @grootte"; 

     query.Connection = verbinding; 

     query.Parameters.Add(new OleDbParameter("@aankomst", OleDbType.DBDate)); 
     query.Parameters["@aankomst"].Value = aankomst; 
     query.Parameters.Add(new OleDbParameter("@vertrek", OleDbType.DBDate)); 
     query.Parameters["@vertrek"].Value = vertrek; 
     query.Parameters.Add(new OleDbParameter("@grootte", OleDbType.VarChar)); 
     query.Parameters["@grootte"].Value = grootte; 

     lezer = query.ExecuteReader(); 

     while (lezer.Read()) 
     { 
      standplaatslijst.Add(new standplaats(lezer)); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
    finally 
    { 
     verbinding.Close(); 
    } 

私はstandplaatsがWICHと呼ばれる新しいクラスにリーダーを追加しているが、次のようになります

public standplaats(OleDbDataReader lezer) 
    { 
     _id = lezer.GetInt32(0); 
     Grootte = lezer.GetString(1); 
     Name = lezer.GetString(2); 
    } 
+0

最初は「SQL.standplaatslijst.Clear();」です。後で 'standplaatslijst.Add(新しいstandplaats(lezer));'です。最初は 'SQL'で始まります。もう1つはありません。それは奇妙に見える。それが何を意味するかわからない。あなたは翻訳できますか?私は「ランクリスト」を取得しますが、多分もっと良い言葉があります。 – wazz

+0

@wazz standplaatsenlijstはsqlクラスのリストで、sqlは現在作業しているクラスです。 SQLを削除します。それをより明確にするための部分。フィードバックに感謝します –

+0

問題は 'standplaatslijst.Add(new standplaats(lezer));'にあります。新しいリストアイテムが必要ですが、リーダーからのデータではなく、リーダー全体を提供しています。 – wazz

答えて

0

SIZEは、MS Accessの予約語です。

変更これにクエリ:

query.CommandText = @"SELECT * 
         FROM standplaats 
         WHERE id not in (SELECT standplaats_id 
         FROM reservering 
         WHERE @aankomst BETWEEN aankomst AND vertrek 
         AND @vertrek BETWEEN aankomst AND vertrek) 
         AND [size] = @grootte"; 

Hereあなたが予約語のリストを見つけます。

+0

あなたの助けてくれてありがとうが、これはうまくいかなかった。私はあなたのクエリに私のクエリを変更し、それは私がまだエラーを持っている#Cコードではないが、私はそれをアクセスデータベースに貼り付けたときに動作しなかった動作しませんでした –

+0

申し訳ありません。答えを編集しました。今は正しいはずです。 – MatSnow

+0

ありがとうございました –

関連する問題