gaurav.s23 Ответов: 1

Не удалось открыть oledbconnection...


Я не смог открыть OleDbConnection, я получаю исключение, когда код вызывает метод Open (). То, что я пытаюсь сделать, это загрузить из excel в таблицу данных.

На моей локальной машине установлен Office 2016 (64), я установил AccessDatabaseEngine_X64,

Иногда я получаю ошибку: внешняя таблица не находится в ожидаемом формате excel 2016.
И иногда я получаю сообщение об ошибке: поставщик "Microsoft.ACE.OLEDB.12.0" не зарегистрирован на локальном компьютере."

Это мой код :
private DataTable ExcelToDataTable(string dataSource, string selectColumn, string keyword)
      {
          string provider = OleDBProvider;
          string ds = dataSource;
          string extendedProperties = ExtendedProperties;

          string cs = String.Format("Provider={0}; Data Source={1}; Extended Properties={2};", provider, ds, extendedProperties);

          var xlConn = new OleDbConnection(cs);
          DataTable dtXlSchema;
          dt = new DataTable("ReviewTable");

          try
          {
              xlConn.Open();
              dtXlSchema = xlConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

              for (int i = 0; i < dtXlSchema.Rows.Count; i++)
              {
                  string sTableName = dtXlSchema.Rows[i]["Table_Name"].ToString();
                  string query = "";

                  if (!String.IsNullOrWhiteSpace(keyword))
                  {
                      query = "Select [" + selectColumn + "] from [" + sTableName + "] where [" + selectColumn + "] like '%" + keyword + "%' Order by [" + selectColumn + "]";
                      //  query = "Select [s-ip]  from [" + sTableName + "] where [s-ip] like '%" + kw + "%' Order by [s-ip]";
                  }
                  else
                  {
                      query = "Select [" + selectColumn + "] from [" + sTableName + "]Order by [" + selectColumn + "]";
                      // query = "Select [cs-uri-stem]  from [" + sTableName + "]Order by [cs-uri-stem]";
                      // query = "Select [s-ip]  from [" + sTableName + "]Order by [s-ip]";
                  }

                  OleDbDataAdapter da = new OleDbDataAdapter(query, xlConn);
                  da.AcceptChangesDuringFill = true;
                  da.Fill(dt);
                  da.Dispose();
              }

          }
          catch (Exception ex)
          {
              WriteError(ex);
          }
          finally
          {
              xlConn.Close();
          }

          return dt;
      }


Что я уже пробовал:

Я перепробовал все эти настройки.
<appSettings>
  <add key="OleDBProvider" value="Microsoft.ACE.OLEDB.12.0"/>
  <!--<add key="ExtendedProperties" value="'Excel 8.0;HDR=Yes;IMEX=1'"/>-->
<!--<add key="ExtendedProperties" value="'Excel 12.0;HDR=Yes;'"/>-->
  <add key="ExtendedProperties" value="'Excel 12.0 Xml;HDR=Yes;'"/>
</appSettings>

1 Ответов

Рейтинг:
6

Maciej Los

Чтобы решить вашу проблему с помощью Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine ошибка, следуйте инструкциям из: Поставщик OLEDB не зарегистрирован на локальном компьютере[^]