【发布时间】:2017-11-15 08:52:10
【问题描述】:
我收到了
IErrorInfo.GetDescription 失败,出现 E_FAIL(0x80004005)
我不知道这意味着什么,也不知道如何解决。当我将 accact 查询复制并粘贴到我的 Acces-db 中并运行它时,它就像一个魅力,但是当我尝试在 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 的新类中,如下所示:
public standplaats(OleDbDataReader lezer)
{
_id = lezer.GetInt32(0);
Grootte = lezer.GetString(1);
Name = lezer.GetString(2);
}
【问题讨论】:
-
开头是
SQL.standplaatslijst.Clear();。后来是standplaatslijst.Add(new standplaats(lezer));。第一个以SQL开头;第二个没有。这看起来很奇怪。不确定那是什么意思;你可以翻译吗?我得到“排名列表”,但也许有更好的词。 -
@wazz standplaatsenlijst 是 sql 类中的一个列表,而 sql 是我目前正在使用的类。生病删除SQL。部分使其更清晰。感谢您的反馈
-
我认为问题出在
standplaatslijst.Add(new standplaats(lezer));。您想要一个新的列表项,但您提供的是整个 Reader,而不是来自 Reader 的数据。 -
只是一个想法。注意保留字。也许尝试在 [] 中包装来字段。例如:`WHERE [id] not in... 可能不是问题...
-
我已经看过几次这个修复了:stackoverflow.com/questions/15534284/…
标签: c# ms-access oledbexception