【问题标题】:Error: System.Data.OleDb.OleDbException: 'No value given for one or more required parameters'错误:System.Data.OleDb.OleDbException:“没有为一个或多个必需参数提供值”
【发布时间】:2020-06-02 13:10:56
【问题描述】:

我在尝试使用 OleDb 时不断收到此错误,但不知道如何解决该问题。我试过引用其他网站等等,但一无所获。这是我的代码的样子:

OleDbCommand command = new OleDbCommand(@"SELECT [Name], [Config status], [OverallStatus], [NumHosts], [numEffectiveHosts], [TotalCpu], [NumCpuCores], [NumCpuThreads], [EffectiveCpu], [TotalMemory], [EffectiveMemory], [Num VMotions], [HA enabled], [Failover Level], [AdmissionControlEnabled], [Host monitoring], [HB Datastore Candidate Policy], [Isolation Response], [Restart Priority], [Cluster Settings], [Max Failures], [Max Failure Window], [Failure Interval], [Min Up Time], [VM Monitoring], [DRS enabled], [DRS default VM behavior], [DRS vmotion rate], [DPM enabled], [DPM default behavior], [DPM Host Power Action Rate] FROM [" + Sheet + "$]", conn); //Selects everything inside excel file
        DataTable Data = new DataTable();
        OleDbDataAdapter adapter = new OleDbDataAdapter(command);
        adapter.Fill(Data); //Puts all data inside a DataSet

错误发生在 adapter.Fill(Data) 行。感谢您提供的任何帮助!

编辑:有关更多详细信息,我正在尝试使用 OleDb 从 Excel 电子表格中提取数据,将该数据放入 DataTable 对象中,然后使用实体框架将该数据推送到 SQL 服务器数据库。在我的 Excel 电子表格中,我尝试访问的工作表名为“vCluster”。问题可能出在我的 OleDbConnection 字符串中吗?

【问题讨论】:

  • 您的电子表格中有标题行吗?你的连接字符串是什么?仔细检查您的列名称与 excel 列的名称。如果您有错字,则会出现此错误。
  • 我在电子表格中确实有一个标题行,我刚刚检查了列的名称与 excel 列的名称。我发现了一个小的间距问题,但在修复之后我仍然得到同样的错误。 “如果您有类型,则会出现此错误”是什么意思?
  • 这是一个错字,并没有被更正为“错字”。然而。如果列名(在 excel 中)与 C# 中的列名不匹配,则 OleDb 认为您正在提供参数并引发错误。
  • 还要检查表名。它应该与 excel 中的工作表名称匹配。
  • 感谢史蒂夫的帮助!与 C# 中的列名相比,Excel 中的列名实际上是一个错误。

标签: c# oledb oledbcommand oledbdataadapter


【解决方案1】:

您需要从查询中删除$。

@"SELECT [Name], [Config status], [OverallStatus], [NumHosts], [numEffectiveHosts], [TotalCpu], [NumCpuCores], [NumCpuThreads], [EffectiveCpu], [TotalMemory], [EffectiveMemory], [Num VMotions], [HA enabled], [Failover Level], [AdmissionControlEnabled], [Host monitoring], [HB Datastore Candidate Policy], [Isolation Response], [Restart Priority], [Cluster Settings], [Max Failures], [Max Failure Window], [Failure Interval], [Min Up Time], [VM Monitoring], [DRS enabled], [DRS default VM behavior], [DRS vmotion rate], [DPM enabled], [DPM default behavior], [DPM Host Power Action Rate] FROM [" + temp + "]";

【讨论】:

  • 您好,感谢您的帮助,我这样做后遇到了一个新问题。这是发生的错误,它也发生在同一行:System.Data.OleDb.OleDbException:'Microsoft Access 数据库引擎找不到对象'vCluster'。确保对象存在并且正确拼写其名称和路径名。如果“vCluster”不是本地对象,请检查您的网络连接或联系服务器管理员。'
  • 数据库中是否存在表vCluster?
  • 它存在于我试图从中提取数据的 excel 电子表格中。数据库中有一个Cluster,我想把数据放进去,但是名字有点不一样。
  • 这就是它给出错误的原因。名称应匹配
  • 如果此查询旨在从 Excel 工作表中检索值,则需要 $ 来识别工作表名称,就像它是表名一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
相关资源
最近更新 更多