繁体   English   中英

Oledb查询中没有为一个或多个必需参数提供值

[英]No value given for one or more required parameters in Oledb query

我正在尝试查询CSV文件。 当我执行一个简单的选择时,它就起作用了,但是当我尝试添加一个where子句时,我遇到了一个或多个必需参数没有给出值的问题

显然,这听起来好像没有得到提供的参数,但是我尝试了多种方式传递它。 参见下面的一些代码示例

DateTime lastRunDate = Convert.ToDateTime(ConfigurationManager.AppSettings["LastRunDate"]);

OleDbConnection conn = new OleDbConnection(
            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + base.applicationRoot + ";" +
            "Extended Properties=\"text;HDR=Yes;FMT=CSVDelimited\"");

// This works just fine
//OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("select * from {0}", 

// This gives the error
OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("select top 100 * from [{0}] where {0}.sale_date = @sDate", base.csvFileName), conn);
//adapter.SelectCommand.Parameters.Add("@sDate", OleDbType.DBDate).Value = lastRunDate;
adapter.SelectCommand.Parameters.AddWithValue("@sDate", lastRunDate);

// This also gives the same error as above
//OleDbDataAdapter adapter = new OleDbDataAdapter(String.Format("select top 100 * from {0} where sale_date = '{1}'", base.csvFileName, lastRunDate), conn);
base.csvFileName, lastRunDate.ToShortDateString()), conn);

DataTable dt = new DataTable();
adapter.Fill(dt);

我对C#一无所知,并且对SQL还是很陌生,但也许这是查询的SELECT TOP部分。 我知道SELECT TOP并不是所有数据库系统都真正接受的,并且这两个查询都包含有问题。 您是否尝试过删除它并改用LIMIT?

"select top 100 * from [{0}] where {0}.sale_date = @sDate"

"select * from [{0}] where {0}.sale_date = @sDate LIMIT 100"

我将其添加为注释,因为它不是具体答案,但我还没有所需的代表。

删除此行。 您已两次添加参数。

adapter.SelectCommand.Parameters.AddWithValue("@sDate", lastRunDate);

并确保该值存在于lastRunDate变量中。 它不应为null。

编辑:

从条件中删除表名,像这样使用

从[{0}]中选择前100个*,其中sale_date = @ sDate

Excel文件和查询中的列名称不相同。

  1. 列名称均丢失。
  2. Excel文件中不存在列名。

我发现他对此有疑问。 该查询根本不理解列名。

我认为设置HDR=Yes意味着oledb会读取第一行标题,因此知道它们。 但是直到我添加了设法以这种方式查询的schema.ini文件。

这是有关schema.ini文件的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM