Conn.Open中的OleDbConnection错误()

时间:2017-06-12 13:02:12

标签: c#

我正在尝试从excel文件中读取数据。文件的路径在配置文件中设置。我创建了一个用于连接目的的库类和另一个用于存储在c#对象中检索的值的库类。我完全在控制台应用程序上运行它。但是我最终在Conn.Open()中得到了一个无效的参数异常。

  

未处理的类型' System.Data.OleDb.OleDbException'   发生在System.Data.dll中的附加信息:无效的参数

这是我的Connection类

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ExcelLib
{
  public class ExcelLib
  {
    public DataSet Excel()
    {
      string filepath = 
        Convert.ToString(ConfigurationManager.AppSettings["Path"]);
      string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath 
        + ";Extended Properties=\"Excel 12.0;ReadOnly=True;HDR=Yes;\"";
      string query = "Select * from [jobs_productioncontrol$]";
      using (OleDbConnection conn = new OleDbConnection(conStr))
      {
        conn.Open();
        OleDbCommand cmd = new OleDbCommand(query, conn);
        cmd.Connection = conn;

        OleDbDataAdapter command = new OleDbDataAdapter();
        command.SelectCommand = cmd;
        DataSet ds = new DataSet();
        command.Fill(ds);

        DataTable dt = new DataTable();
        dt = ds.Tables.Add();

        foreach (DataRow row in dt.Rows)
        {
          ExcelData data = new ExcelData();
          data.JobNo = row["JobNo"].ToString();
          data.EventNo = row["EventNo"].ToString();
        }
        return ds;
      }
    }
  }
}

1 个答案:

答案 0 :(得分:0)

根据对该问题的评论,filepathnull,表示appSettings已按预期配置。 App.config文件需要与使用应用程序相关联,而不是类库。

我强烈建议消费应用程序负责加载可配置设置并将它们传播到类库中。它可能会阻止这个问题,并可能在未来防止其他混淆源。