1 Вопрос: Проблемы с написанием кода для импорта файлов Excel в базу данных с asp.net

вопрос создан в Thu, May 2, 2019 12:00 AM

У меня проблемы с импортом данных Excel в базу данных. Я получаю следующую ошибку:

  

Поставщик OLE DB не был указан в ConnectionString. Примером может быть «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))
    
2
1 ответ                              1                         

В строках соединения Excel03ConString и Excel07+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'" />
    
0
2019-05-02 15: 20: 54Z
  1. Когда я добавляю "provider", я получаю следующую ошибку: Неподдерживаемое ключевое слово: 'provider'. Вот почему я вынул строку ошибки «провайдер»: using (SqlConnection con = new SqlConnection (conString))
    2019-05-02 15: 18: 27Z
  2. Строки подключения для Строки подключения ACE и JET показывают что им требуется имя атрибута Provider.
    2019-05-02 15: 22: 48Z
  3. Lews Я сделал это и получил совершенно новую ошибку: «Свойство ConnectionString не инициализировано» В этой строке: excel_con.Open (); Не знаю, что значит быть честным
    2019-05-02 15: 27: 08Z
  4. @ PedroPereira Какое значение conString при отладке и установке точки останова на строке using (SqlConnection con = new SqlConnection(conString))?
    2019-05-02 15: 32: 01Z
  5. Я уже исправил эту ошибку, теперь я получаю еще одну: «не удалось найти устанавливаемый isam» в строке: excel_con.Open ();
    2019-05-02 15: 49: 42Z
источник размещен Вот