简体   繁体   English

使用asp.net编写将excel文件导入数据库的代码的问题

[英]Problems with writing a code to import excel files into database with asp.net

I'm having problems with importing Excel data into a database.我在将 Excel 数据导入数据库时​​遇到问题。 I receive the following error:我收到以下错误:

An OLE DB Provider was not specified in ConnectionString. ConnectionString 中未指定 OLE DB 提供程序。 An example would be, 'Provider = SQLOLEDB;'.例如,'Provider = SQLOLEDB;'。

Here's my code:这是我的代码:

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>

Error line:错误行:

using (OleDbConnection excel_con = new OleDbConnection(conString))

Your Excel03ConString and Excel07+ConString connection strings are missing the provider attribute name.您的Excel03ConStringExcel07+ConString连接字符串缺少provider属性名称。 Change them to the following:将它们更改为以下内容:

<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'" />

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

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