SQL Server SMO жалуется на отсутствие DLL

Хорошо, я просмотрел Интернет, BOL, различные форумы, и я не приблизился к ответу ... надеюсь, вы, прекрасные люди, можете протянуть руку помощи ...

У нас есть около дюжины SQL-серверов (около 2k, около 2005 г.) в сети. Я использую объекты SMO в приложении .NET, чтобы получить некоторую стандартную информацию. Моя проблема, похоже, сводится к отсутствующей DLL - Microsoft.SqlServer.BatchParser.dll. Однако эта DLL не поставлялась с другими библиотеками SQL (Microsoft.SqlServer.ConnectionInfo.dll, Microsoft.SqlServer.Smo.dll, Microsoft.SqlServer.SmoEnum.dll, Microsoft.SqlServer.SqlEnum.dll и т. Д.) . Я также загрузил пакет функций SS2005 с сайта Microsoft, который включает объекты SMO, но все равно не повезло.

Следующий код работает, если я не раскомментирую строку, которая в настоящее время прокомментирована, и в этом случае я получаю следующую ошибку:

protected void btnArchive_Click(object sender, EventArgs e)
{
    ServerConnection conn = new ServerConnection("my_server");

    conn.LoginSecure = false;
    conn.Login = "my_login";
    conn.Password = "my_password";

    Server s = new Server(conn);
    Database d = s.Databases["my_database"];
    //Table tbl = d.Tables["my_table"];

    Response.Write(s.Name + " " + s.Information.RootDirectory + " " + d.CreateDate.ToShortDateString());
    conn.Disconnect();
}

Ошибка: не удалось загрузить файл или сборку Microsoft.SqlServer.BatchParser, Version = 9.0.242.0, Culture = нейтральный, PublicKeyToken = 89845dcd8080cc91 или одну из их зависимостей. Система не может найти указанный файл.

Обратите внимание, я также пробовал это из SSIS с использованием VB.NET, такое же поведение.

Любые мысли будут оценены.

Спасибо.


person Community    schedule 11.02.2009    source источник


Ответы (6)


Мне удалось успешно запустить ваш код, используя версии 10. * сборок «Microsoft.SqlServer.ConnectionInfo», «Microsoft.SqlServer.Management.Sdk.Sfc» и «Microsoft.SqlServer.Smo». Попробуйте загрузить версию компонентов SMO 2008, возможно, это была ошибка, они теперь исправлены.

person tbreffni    schedule 15.02.2009
comment
После этого у меня сработало. Однако я добавлю, что в моем случае мне пришлось использовать 32-битную версию, потому что мой пул приложений работал с включенным 32-битным режимом. Потребовалось много времени, чтобы разобраться в проблеме, так что я надеюсь, что это поможет кому-то другому. - person esteuart; 07.10.2011
comment
@esteuart, вам нужно иметь это как собственный ответ! через несколько часов это меня наконец спасло (для версии 12.0.0.0) - person SumGuy; 14.06.2016

У вас на коробке установлена ​​операционная система x64? Похоже, есть проблемы с BatchParser.dll в 64-битных средах - обычно рекомендуется загрузить SMO x64 Package (SQLServer2005_XMO_x64.msi) от Microsoft.

См. Информацию об этом здесь.

person marc_s    schedule 12.02.2009

Я знаю, что очень опаздываю на вечеринку, но это все еще первый результат, когда вы гуглите Smo batchparser.

При установке SMO 2014 (12.0.x) некоторые библиотеки DLL устанавливаются только в GAC. Чтобы ваше приложение работало без необходимости вручную устанавливать SMO на целевой сервер, вы должны скопировать эти библиотеки DLL вместе с приложением. Вот пути, откуда я их взял.

C: \ Program Files \ Microsoft SQL Server \ 120 \ SDK \ Assemblies \ Microsoft.SqlServer.ConnectionInfo.dll

C: \ Program Files \ Microsoft SQL Server \ 120 \ SDK \ Assemblies \ Microsoft.SqlServer.Management.Sdk.Sfc.dll

C: \ Program Files \ Microsoft SQL Server \ 120 \ SDK \ Assemblies \ Microsoft.SqlServer.Smo.dll

C: \ Program Files \ Microsoft SQL Server \ 120 \ SDK \ Assemblies \ Microsoft.SqlServer.SmoExtended.dll

C: \ Program Files \ Microsoft SQL Server \ 120 \ SDK \ Assemblies \ Microsoft.SqlServer.SqlEnum.dll

C: \ Windows \ assembly \ GAC_64 \ Microsoft.SqlServer.BatchParser \ 12.0.0.0__89845dcd8080cc91 \ Microsoft.SqlServer.BatchParser.dll

C: \ Windows \ assembly \ GAC_MSIL \ Microsoft.SqlServer.BatchParserClient \ 12.0.0.0__89845dcd8080cc91 \ Microsoft.SqlServer.BatchParserClient.dll

C: \ Windows \ assembly \ GAC_MSIL \ Microsoft.SqlServer.SqlClrProvider \ 12.0.0.0__89845dcd8080cc91 \ Microsoft.SqlServer.SqlClrProvider.dll

Чтобы получить доступ к файлам GAC, вам необходимо отключить встроенную программу просмотра Windows, используя инструкции, предоставленные эту статью.

Отрывок из статьи для удобства:

Откройте редактор реестра и добавьте / установите значение DWORD HKLM \ Software \ Microsoft \ Fusion \ DisableCacheViewer: 1

person EdwTests    schedule 15.04.2015
comment
DLL BatchParser в конечном итоге вызывает эту ошибку: Попытка загрузить непроверяемый исполняемый файл с исправлениями (IAT с более чем двумя разделами или раздел TLS). HRESULT: 0x80131019. - person Jerther; 15.11.2016
comment
Через несколько часов: может быть вызвано приложением, созданным с любым процессором, но с активированным Prefer 32 бита. - person Jerther; 15.11.2016

Вам необходимо установить следующий пакет, чтобы решить проблему, я решил эту проблему дважды с этим пакетом, надеюсь, что он может сработать и для всех ...

Коллекция объектов управления Microsoft SQL Server 2005 Пакет «Коллекция объектов управления» включает несколько ключевых элементов API управления SQL Server 2005, включая объекты управления анализом (AMO), объекты управления репликацией (RMO) и объекты управления SQL Server (SMO). Разработчики и администраторы баз данных могут использовать эти компоненты для программного управления SQL Server 2005.

Вы можете получить пакет дополнительных компонентов для Microsoft SQL Server 2005 - декабрь 2008 г. с сайта Microsoft

http://www.microsoft.com/en-us/download/details.aspx?id=11988

Но расположение ссылки на странице загрузки меняется каждый раз, если вы не можете найти ресурс, вы также можете загрузить его из моего блога.

Я также предоставил несколько советов и ресурсов по этому поводу в моем блоге, если вы хотите http://rndp-android.blogspot.com/p/missing-microsoftsqlservermanagementsdk.html

person Dipen    schedule 21.12.2012

Просто чтобы мы правильно поняли проблему, Microsoft.SqlServer.BatchParser.dll не установлен в глобальном кэше сборок на вашем компьютере разработки? Если это так, вы можете начать с переустановки .NET Framework (версии Framework, на которую вы нацеливаете), чтобы увидеть, решит ли это проблему.

Вы также можете попробовать использовать инструмент настройки .NET Framework, чтобы проверить, действительно ли сборка присутствует в глобальном кэше сборок (GAC). В этой статье MSDN описано, как использовать этот инструмент. .

(Поиск на моем жестком диске не дал сборки Microsoft.SqlServer.BatchParser.dll, хотя я могу увидеть ее с помощью инструмента настройки .NET Framework).

person Tim Lentine    schedule 11.02.2009
comment
Спасибо за ответ. Хотя я точно не знаю, где находится глобальный кэш сборок, я просмотрел весь диск, и эта dll не существует. Я также переустановил последнюю версию фреймворка (3.5 SP1). - person ; 11.02.2009
comment
GAC обычно находится в% windir% \ assembly - person kristianp; 20.04.2012

он входит в состав советника по обновлению на 2005 или 2008 гг.

person noob1e dba    schedule 24.06.2010