SQL Server 2005, выполняющий хранимую процедуру из Excel (VBA)

Я пытаюсь запустить хранимую процедуру на моем сервере SQL. Я думаю, что тип соединения "ODBC", но я не уверен, я пытаюсь сделать следующее:

'Declare some variables
Dim cnn As ADODB.Connection
Dim cmd As ADODB.Command
Dim strSQL As String
Dim gway As String

'Create a new Connection object
Set cnn = New ADODB.Connection

'Set the connection string
cnn.ConnectionString = connectionString 'See http://connectionstrings.com if you need help on building this string for your database!

'Create a new Command object
Set cmd = New ADODB.Command
'Associate the command with the connection
'Open the Connection to the database
cnn.Open
cmd.ActiveConnection = cnn


VARIABLE= "param"
strSQL = "EXECUTE dbo.NAMEWASHERE '" & VARIABLE & "';"



cmd.Execute strSQL

'Close the connection again
cnn.Close

Когда я пытаюсь запустить это, я получаю сообщение об ошибке: Ошибка выполнения «3709»;

Для запрошенной операции требуется объект сеанса OLE DB, который не поддерживается текущим поставщиком.

Я уверен, что где-то ошибся в типе подключения, но может ли кто-нибудь мне помочь?

Чтобы подтвердить, я пытаюсь подключиться через ODBC к SQLServer2005 через Excel VBA (2003)

Большое спасибо.

ОБНОВЛЕНИЕ С ИСПРАВЛЕНИЕМ: необходимо открыть соединение перед использованием ".ActiveConnection = """. Я отредактировал исходный код, чтобы показать это изменение.


person Waller    schedule 01.09.2011    source источник
comment
Код выглядит нормально, причина ошибки зависит от конкретной строки подключения, которую вы используете, что это такое?   -  person Alex K.    schedule 01.09.2011
comment
ODBC;DSN=serverAddr;UID=LoginName;PWD=MyPassword;LANGUAGE=us_english; DATABASE=Имя Базы Данных. Очевидно, что это конфиденциально, поэтому, если ошибка здесь, вы не сможете помочь. Я надеюсь, что вы можете помочь. РЕДАКТИРОВАТЬ: я использую SQL Express 2005, если это имеет значение.   -  person Waller    schedule 01.09.2011
comment
Я бы использовал строку подключения SQL Server Native Client 10.0 OLE DB Provider из connectionstrings.com/sql-server-2005#p2   -  person Alex K.    schedule 01.09.2011
comment
Та же ошибка снова, это действительно расстраивает. Возможно, это что-то не так внутри, и вы не можете помочь дальше? Не могли бы вы объяснить, почему вы выбрали эту строку подключения? Тогда я мог бы попытаться питаться оттуда. РЕДАКТИРОВАТЬ: Проблема исправлена. Я постараюсь отредактировать свой основной пост с разрешением   -  person Waller    schedule 01.09.2011
comment
Собственный клиент 10 — это последний поставщик для SQL-сервера. Если я скопирую/вставлю ваш код и использую; cnn.connectionString = "Provider=SQLNCLI10;Server=10.1.241.20;Database=master;Uid=xxx;Pwd=xxx;" и переместите Set cmd.ActiveConnection = cnn в после вызова cnn.Open, у меня все работает нормально   -  person Alex K.    schedule 01.09.2011
comment
@Waller Пожалуйста, опубликуйте свое исправление в качестве ответа. Через некоторое время вы сможете принять свой собственный ответ.   -  person Fionnuala    schedule 02.09.2011
comment
Здравствуйте, уязвимость SQL-инъекций   -  person Joel Coehoorn    schedule 13.02.2012


Ответы (1)


ОБНОВЛЕНИЕ С ИСПРАВЛЕНИЕМ: вы должны открыть соединение перед использованием «.ActiveConnection = «»». Я отредактировал исходный код, чтобы показать это изменение.

person Waller    schedule 06.09.2011