【问题标题】:Problems with writing a code to import excel files into database with asp.net编写代码以使用 asp.net 将 excel 文件导入数据库的问题
【发布时间】:2019-05-02 15:00:50
【问题描述】:

我在将 Excel 数据导入数据库时​​遇到问题。我收到以下错误:

没有在 ConnectionString 中指定 OLE DB 提供程序。例如,'Provider = SQLOLEDB;'。

这是我的代码:

using System;

protected void Page_Load(object sender, EventArgs e)
{
}

protected void Unnamed1_Click(object sender, EventArgs e)
{
    string excelPath = Server.MapPath("~/Files/") + Path.GetFileName(FileUploadBtn.PostedFile.FileName);
    FileUploadBtn.SaveAs(excelPath);

    string conString = string.Empty;
    string extension = Path.GetExtension(FileUploadBtn.PostedFile.FileName);
    switch (extension)
    {
        case ".xls":
            conString = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
            break;
        case ".xlsx":
            conString = ConfigurationManager.ConnectionStrings["Excel07+ConString"].ConnectionString;
            break;
    }

    conString = string.Format(conString, excelPath);
    using (OleDbConnection excel_con = new OleDbConnection(conString))
    {
        excel_con.Open();
        string sheet1= excel_con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null).Rows[0]["TABLE_NAME"].ToString();
        DataTable dtExcel = new DataTable();

        dtExcel.Columns.AddRange(new DataColumn[3]
        {
            new DataColumn ("Name", typeof(string)),
            new DataColumn ("City",typeof(string)),
            new DataColumn ("Age",typeof(int))
        });

        using (OleDbDataAdapter oda = new OleDbDataAdapter("SELECT * FROM [" + sheet1+ "]", excel_con))
        {
            oda.Fill(dtExcel);
        }

        excel_con.Close();
        string consString = ConfigurationManager.ConnectionStrings["costumizadoConnectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(conString))
        {
            using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(con))
            {
                sqlBulkCopy.DestinationTableName = "dbo.test";

                sqlBulkCopy.ColumnMappings.Add("Name", "Name");
                sqlBulkCopy.ColumnMappings.Add("City", "City");
                sqlBulkCopy.ColumnMappings.Add("Age", "Age");
                con.Open();
                sqlBulkCopy.WriteToServer(dtExcel);
                con.Close();
            }
        }
    }
}

Web.config:

<configuration>
  <connectionStrings>
    <add name="costumizadoConnectionString" connectionString="Data Source=PEDRO-PC\SQLEXPRESS;Initial Catalog=costumizado;Integrated Security=True; Provider=SQLNCLI10.1"
     providerName="System.Data.OleDb"  />
    <add name="Excel03ConString" connectionString="Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'" />
    <add name="Excel07+ConString" connectionString="Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'" />
  </connectionStrings>
</configuration>

错误行:

using (OleDbConnection excel_con = new OleDbConnection(conString))

【问题讨论】:

    标签: c# html asp.net


    【解决方案1】:

    您的Excel03ConStringExcel07+ConString 连接字符串缺少provider 属性名称。将它们更改为以下内容:

    <add name="Excel03ConString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'" />
    <add name="Excel07+ConString" connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=YES'" />
    

    【讨论】:

    • 当我输入“provider”时出现以下错误:不支持的关键字:“provider”。这就是为什么我取出“提供者”错误行: using (SqlConnection con = new SqlConnection(conString))
    • ACEJET 连接字符串的连接字符串都表明它们需要Provider 属性名称。
    • Lews 我这样做了,我得到了一个全新的错误:“ConnectionString 属性未初始化”在这一行中:excel_con.Open();不知道诚实是什么意思
    • @PedroPereira 调试时conString 的值是多少,并在using (SqlConnection con = new SqlConnection(conString)) 行设置断点?
    • 我已经修复了这个错误,现在我得到另一个错误是:“找不到可安装的 isam”在线:excel_con.Open();
    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多