Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CLR процедура выполняющаяся в 32 бит режиме на 64 SQL-сервере  [new]
Degun
Member

Откуда:
Сообщений: 205
На Microsoft SQL Server 2008 R2 64Bit есть некоторая CLR-процедура ConvertCsvToDbfFile, которая конвертирует csv-файл в файл формата dbf.
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void ConvertCsvToDbfFile(SqlString sSrcCsvFileName, SqlString sDstDbfFileName)
    {
....
    }

При конвертации она использует 32-бит драйвер Microsoft.Jet.OLEDB.4.0, аналога которого под 64 бит нет. Но при обращении к CLR-процедуре из TSQL кода она выполняется в 64-битном контексте и поэтому выдаётся ошибка:

Msg 6522, Level 16, State 1, Procedure ConvertCsvToDbfFile, Line 0
A .NET Framework error occurred during execution of user-defined routine or aggregate "ConvertCsvToDbfFile":
System.InvalidOperationException: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
System.InvalidOperationException:
at System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper)
at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OleDb.OleDbConnection.Open()
at StoredProcedures.ConvertCsvToDbfFile(SqlString sSrcCsvFileName, SqlString sDstDbfFileName)

Можно ли как-либо сделать так, чтобы CLR-процедура всегда выполнялась в 32-битном контексте?
11 июн 15, 11:25    [17759039]     Ответить | Цитировать Сообщить модератору
 Re: CLR процедура выполняющаяся в 32 бит режиме на 64 SQL-сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Degun
аналога которого под 64 бит нет.

есть - ACE OLEDB

Degun
Можно ли как-либо сделать так, чтобы CLR-процедура всегда выполнялась в 32-битном контексте?

Ставите рядом 32х битный сервер и обращаетесь к нему, чтобы он выполнял эту 32хбитную CLR
11 июн 15, 11:31    [17759085]     Ответить | Цитировать Сообщить модератору
 Re: CLR процедура выполняющаяся в 32 бит режиме на 64 SQL-сервере  [new]
Degun
Member

Откуда:
Сообщений: 205
Degun
Можно ли как-либо сделать так, чтобы CLR-процедура всегда выполнялась в 32-битном контексте?

Ставите рядом 32х битный сервер и обращаетесь к нему, чтобы он выполнял эту 32хбитную CLR[/quot]

На этом сервере поставил именованный 32-х битный Microsoft SQL Server 2008 R2 Express. Но если в SQL Server Management Studio к нему подключаться с самого сервера, то подключение проходит нормально. А если с другого компьютера, то при подключении выдаётся ошибка:

Cannot connect to APP\SQLEXPRESS
Additional information:
При установлении соединения с SQL Server произошла ошибка, связанная с сетью или с определённым экземпляром. Сервер не найден или не доступен. Убедитесь, что имя экземпляра указано правильно и что на SQL Server разрешены удалённые соединения. (provider: Сетевые интерфейсы SQL, error: 28 - Затребованный протокол не поддерживается сервером) (Microsoft SQL Server)

Где что нужно настроить?
15 июн 15, 10:22    [17770894]     Ответить | Цитировать Сообщить модератору
 Re: CLR процедура выполняющаяся в 32 бит режиме на 64 SQL-сервере  [new]
Glory
Member

Откуда:
Сообщений: 104751
Degun
Где что нужно настроить?

https://msdn.microsoft.com/en-us/library/ms345343(v=sql.105)
15 июн 15, 10:25    [17770911]     Ответить | Цитировать Сообщить модератору
 Re: CLR процедура выполняющаяся в 32 бит режиме на 64 SQL-сервере  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Degun
public static void ConvertCsvToDbfFile


Такой развлекухой надо точно заниматься под SSIS
15 июн 15, 10:31    [17770936]     Ответить | Цитировать Сообщить модератору
 Re: CLR процедура выполняющаяся в 32 бит режиме на 64 SQL-сервере  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Degun,

Если процедура действительно скомпилирована под х32 то ставьте AccessDatabaseEngine.exe и будет вам счастье, если нет, ставьте х64. Если стоит уже х64 то запускайте из cmd > AccessDatabaseEngine.exe /passive поверх х64.
А вообще, как уже посоветовали, лучше перенести реализацию на SSIS
16 июн 15, 00:23    [17774039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить