Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)"

Я пытаюсь запустить следующий оператор, но я получаю сообщения об ошибках чуть ниже. Я исследовал ответы без конца, и никто не работал у меня. Я запускаю Office 365 (64 бит). Я загрузил Microsoft Database Database Engine (64 бит). Это в Visual Studio 2013 с SSDT, а также SQL Server 2012. У меня нет доступа к изменяющейся среде или параметрам запуска для SQL Server. Любая помощь приветствуется.

SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.15.0', 
    'Excel 12.0;Database=C:\Users\UserName\Folder\SomeFile.xlsx;;HDR=NO;IMEX=1', [Table 1$])
  • Msg 7399, уровень 16, состояние 1, строка 1 Поставщик OLE DB "Microsoft.ACE.OLEDB.15.0" для связанного сервера "(null)" сообщил ошибка. Поставщик не предоставил никакой информации об ошибке.
  • Msg 7303, уровень 16, состояние 1, строка 1 Невозможно инициализировать источник данных объект поставщика OLE DB "Microsoft.ACE.OLEDB.15.0" для связанных server "(null)".

Вот что я пробовал:

Во-первых, я побежал...

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

Вслед за... без любви.

EXEC sys.sp_addsrvrolemember @loginame = N'<<Domain\User>>', @rolename = N'sysadmin';
GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.15.0', N'DynamicParameters', 1 
GO 

Я изменил код, чтобы читать Microsoft.ACE.OLEDB.12.0, как я это видел, но до сих пор не люблю.

Я также проверил разрешения C:\Users\MSSQLSERVER\AppData\Local\Temp и C: Windows\ServiceProfiles\NetworkService\AppData\Local, которые предоставили полный доступ для следующих функций: System, MSSQLSERVER и Administrators, Network Сервис (на последнем).

По-прежнему нет любви.

Наконец, я попытался перейти на 32-битную версию Microsoft Access Database Engine, которая не работала.

Помогите, кто-нибудь?

Ответ 2

Вместо того, чтобы изменять пользователя, я нашел это:

https://social.technet.microsoft.com/Forums/lync/en-US/bb2dc720-f8f9-4b93-b5d1-cfb4f8a8b1cb/the-ole-db-provider-microsoftaceoledb120-for-linked-server-null-reported-an-error-access?forum=sqldataaccess

Это может помочь кому-то другому - после попытки каждого решения пытается и исправить эту ошибку на SQL 64..

Невозможно инициализировать объект источника данных поставщика OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)".

.. Я нашел статью здесь...

http://sqlserverpedia.com/blog/sql-server-bloggers/too-many-bits/

.., который предложил мне дать всем полное разрешение на эту папку.

C:\Users\SQL Имя учетной записи службы \AppData\Local\Temp

И эй престо! Мой запрос внезапно вспыхнул. Я пробил воздух в восторге.

Edwaldo

Ответ 3

Это для моей справки, так как я столкнулся с различными сообщениями об ошибках SQL при попытке установить соединение с поставщиком. Другие ответы предписывают "попробуй это, потом это, потом это". Я ценю другие ответы, но мне нравится сочетать конкретные решения с конкретными проблемами


Ошибка... поставщик не предоставил информацию... Не удалось инициализировать объект источника данных...

Номера ошибок

7399, 7303

Сведения об ошибке

Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. 
  The provider did not give any information about the error. 
Msg 7303, Level 16, State 1, Line 2 Cannot initialize the data source object
  of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Решение

Файл был открыт. Закройте его.

Кредит


ОшибкаДоступ запрещен... Не удалось получить информацию о столбце...

Номера ошибок

7399, 73 50

Сведения об ошибке

Msg 7399, Level 16, State 1, Line 2 The OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" reported an error. 
  Access denied.
Msg 7350, Level 16, State 2, Line 2 Cannot get the column information 
  from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Решение

Предоставить доступ

Кредит


ОшибкаНе задано значение для одного или нескольких обязательных параметров.... Невозможно выполнить запрос...

Номера ошибок

???, 73 20

Сведения об ошибке

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "No value given for one or more required parameters.".
Msg 7320, Level 16, State 2, Line 2
Cannot execute the query "select [Col A], [Col A] FROM $Sheet" against OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)". 

Решение

Названия столбцов могут быть неправильными. Существуют ли [Col A] и [Col B] в вашей электронной таблице?


Ошибка"Неуказанная ошибка"... Не удалось инициализировать объект источника данных...

Номера ошибок

???, 7303

Сведения об ошибке

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 2 Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Решение

Запустите SSMS от имени администратора. Смотрите этот вопрос.


Другие ссылки

Другие ответы, которые предлагают изменить свойства. Не уверен, как поможет изменение этих двух свойств (проверка их или снятие флажка).

Ответ 4

Убедитесь, что файл Excel не открыт.

Ответ 5

В SQL Server выполните следующие действия:

  • Откройте одну базу данных.
  • Выберите опцию Server Object.
  • Нажмите Linked Servers.
  • Нажмите Providers.
  • Щелкните правой кнопкой мыши по Microsoft.ACE.OLEDB.12.0 и выберите Properties.
  • Снимите все параметры и закройте.

Ответ 6

Вот конкретно, что работало для меня только тогда, когда запрашиваемый файл Excel не был открыт и при запуске службы SQL Server as me [в качестве пользователя, имеющего доступ в файловую систему]. Я вижу, что часть моего ответа уже дана в другом месте, поэтому я приношу свои извинения за любую избыточность, но ради более сжатого ответа:

USE [master]
GO

EXEC sp_configure 'Show Advanced Options', 1
RECONFIGURE
GO

EXEC sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO

EXEC sp_MSSet_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO


SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                'Excel 12.0;Database=C:\MyExcelFile.xlsx',
                'SELECT * FROM [MyExcelSheetName$]')

Ответ 7

Я запускаю SQL Server 2014 64 bit в Windows 10. Я пробовал все, что сделало его работу:

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 0

Я не знаю, почему выключено AllowInProcess, и это работает, но это было ключом в моем случае. Благодарим вас за предложение отключить все параметры на сервере ссылок.

Ответ 8

В нашем случае это помогло добавить параметр для службы SQL Server:

  • Перейдите в Services.msc, выберите службу SQL Server и откройте "Свойства".
  • Выберите Startup Parameters и добавьте новый параметр –g512
  • Перезапустите службу SQL-сервера.

Ответ 9

  • Закройте SQL Server Management Studio. Введите команду Services.msc в команде запуска, чтобы открыть окно служб.

  • Найдите службу SQL Server и щелкните ее правой кнопкой мыши и выберите свойства.

  • В вкладке "Вход в систему" ​​выберите системную учетную запись/или выберите свой идентификатор домена, учетную запись и пароль.

  • После того, как он найдет ваше имя для входа, нажмите OK.

  • Теперь введите пароли логинов в обоих полях.

  • Перезапустите службы, чтобы новые изменения были применены, как показано на рисунке ниже.

  • Теперь запустите SQL Server Management Studio и попробуйте запустить запрос, если он еще не работает, попробуйте перезагрузить систему.

... или выполните следующий запрос:

USE [master] 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 
GO 
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 
GO 

Ответ 10

В моем случае эта проблема возникала из-за того, что я обращался к файлу из общей папки с помощью computerName. OPENROWSET ('' Microsoft.Jet.OLEDB.4.0 '', '' Excel 8.0; Database = '\ntpc0100\MysharedFolder\KPI_tempData\VariablePayoutDetails.xls'; IMEX = 1; '', '.....) Если вы используете computerName ntpc0100 (независимо от вашего имени компьютера) , вы должны указать IPaddress вашего компьютера. например: - OPENROWSET ('' Microsoft.Jet.OLEDB.4.0 '', '' Excel 8.0; Database = '\ 193.34.23.200\MysharedFolder\KPI_tempData\KPIVariablePayoutDetails.xls'....);

Ответ 11

Для меня эти две вещи помогали в разных случаях:

1) Если вы только что установили среду выполнения MS Access, перезагрузите сервер. Отказывать экземпляр базы данных недостаточно.

2) Чтобы убедиться, что файл Excel не открыт, проверьте, не открылся ли проводник Windows с включенной панелью предварительного просмотра - это также блокирует его.

Ответ 12

Exec sp_configure 'show advanced options', 1;
RECONFIGURE;
GO

Exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 1; 
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 1;
GO

Insert into OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=C:\upload_test.xlsx;Extended Properties=Excel 12.0')...[Sheet1$]
SELECT ColumnNames FROM Your_table -- Sheet Should be already Present along with headers

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'AllowInProcess' , 0;
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0' , N'DynamicParameters' , 0;
GO

Exec sp_configure 'Ad Hoc Distributed Queries', 0;
RECONFIGURE;
GO

Exec sp_configure 'show advanced options', 0
RECONFIGURE;
GO

Ответ 13

С SQL 2014 я заменил службу SQL Server (MSSQL) на LocalSystem. Это решило проблему для меня.

Он работал как NT_SERVICE\MSSQL$MSSQL в порядке до 2008 года, из того, что я помню.

Ответ 14

У меня было то же самое сообщение об ошибке и пробовал предлагаемые решения в этом потоке, но безуспешно.

что я решил решить проблему, открывает файл .xlsx и сохраняет его как файл .xls(excel 2003).

Возможно, файл был поврежден или в другом формате, и его сохранение снова зафиксировало его.

Ответ 15

Это мой код ошибки:

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "The Microsoft Access database engine could not find the object 'ByStore$'. Make sure the object exists and that you spell its name and the path name correctly. If 'ByStore$' is not a local object, check your network connection or contact the server administrator.".

Msg 7350, Level 16, State 2, Procedure PeopleCounter_daily, Line 26

Cannot get the column information from OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

Моя проблема заключалась в отсутствии файла excel на пути. Просто поставьте файл с правильным листом.

Ответ 16

Для меня это было разрешение на папку с файлами. Мне пришлось добавить все разрешения для пользователя "Все". Папка/свойства/безопасность → добавить каждого пользователя и установить все разрешения.

Ответ 17

Есть две важные неочевидные настройки, которые я обнаружил при настройке связанных серверов в Excel под SQL Server 2014. С этими настройками ' FROM OPENDATASOURCE(''Microsoft.ACE.OLEDB.16.0'', ...)', а также '... FROM [' + @srv_name + ']...data AS xl ...' работают правильно.

Создание связанного сервера

Это только для контекста.

DECLARE @DB_NAME NVARCHAR(30) = DB_NAME();
DECLARE @srv_name nvarchar(64) = N'<srv_base_name>@' + @DB_NAME; --to distinguish linked server usage by different databases

EXEC sp_addlinkedserver
    @[email protected]_name,
    @srvproduct=N'OLE DB Provider for ACE 16.0',
    @provider= N'Microsoft.ACE.OLEDB.16.0',
    @datasrc= '<local_file_path>\<excel_workbook_name>.xlsx',
    @provstr= N'Excel 12.0;HDR=YES;IMEX=0'
;
  1. @datasrc: здесь важно кодирование: varchar вместо н VARCHAR.
  2. @provstr: Verion, настройки и синтаксис важны!
  3. @provider: укажите провайдера, установленного в вашей среде SQL Server. Доступные поставщики перечислены в Server Objects::Linked Servers::Providers в SSMS Object Explorer.

Предоставление доступа к связанному серверу под определенными именами входа SQL Server

Это первый решающий параметр. Даже для SA, как для любого другого входа в SQL Server:

EXEC sp_addlinkedsrvlogin @rmtsrvname = @srv_name, @locallogin = N'sa', @useself = N'False', @rmtuser = N'admin', @rmtpassword = N''
;
  1. @rmtuser: Это должен быть admin. На самом деле в системе одновременно нет admin в логинах Windows.
  2. @rmtpassword: это должна быть пустая строка.

Предоставление доступа к связанному серверу с помощью специальных запросов

Это второй важный параметр. Установка Ad Hoc Distributed Queries на 1 недостаточна. Необходимо установить 0 раздел реестра DisallowAdhocAccess явно для драйвера, указанного для @provider:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.DEF_INST\Providers\Microsoft.ACE.OLEDB.16.0]
"DisallowAdhocAccess"=dword:00000000