Получение Resultset из хранимых процедур SQL Server в Access - PullRequest
2 голосов
/ 06 июня 2011

Мне посчастливилось унаследовать базу данных Access, которая нуждается в огромной очистке. На самом деле мы собираемся покинуть Access и преобразовать его в .NET / SQL Server. Однако пока мы сохраняем пользовательский интерфейс базы данных Access и переносим все запросы в SQL Server.

К сожалению, я никогда по-настоящему не работал с Access напрямую, поэтому я спотыкаюсь на ходу.

Я ищу способ написать функцию, которая принимает хранимый процесс и некоторые значения параметров, выполняет хранимый процесс на SQL Server и возвращает результаты в виде Resultset.

Так что подпись может выглядеть так ...

Public Function ExecuteStoredProcedure(storedProcName As String, parameterValues As String) As RecordSet

Передаваемые значения параметров будут разделяться запятыми.

Так что пример вызова этой функции может выглядеть так ...

Set returnValues = ExecuteStoredProcedure("SP_GetTableXYZContents","'01/01/2011','ABCD',2345")

Это кажется таким тривиальным, но я не могу заставить его работать должным образом. Кто-нибудь может указать мне правильное направление?

Я выполняю их просто следующим образом (но не могу получить возвращаемые значения)

Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
conn.Open "...connectionstring..."
conn.Execute storedProcCall, dbSQLPassThrough

Обратите внимание, что в приведенном выше коде функция принимает только одну строковую переменную (имя SP и значения параметров, где имя и значения SP разделены пробелом, а значения - запятыми.

Заранее спасибо за любую помощь!

Ответы [ 2 ]

5 голосов
/ 06 июня 2011

Есть несколько способов сделать это.Вот две возможности.

Первый - самый простой:

  ' String specifying SQL.
  SQL = "My_StorProc parm1, parm2, parm3"
  ...
  ' For a stored procedure that doesn't return records.
  MyDb.Execute SQL, dbSQLPassThrough
  i = MyDb.RowsAffected
  ...
  'For a stored procedure that returns records.
  set Rs = MyDB.OpenRecordset(SQL, dbOpenSnapshot, dbSQLPassThrough)

Ref: Как вызывать хранимые процедуры с использованием объектов доступа к данным

второй использует объекты ADODB:

   Dim Conn As ADODB.Connection
   Dim Cmd As ADODB.Command
   Dim Rs As ADODB.Recordset
   Dim Connect As String

   sConnect= "driver={sql server};" & _
             "server=server_name;" & _
             "Database=pubs;UID=uder_id;PWD=password;"

   ' Establish connection.
   Set Conn = New ADODB.Connection
   Conn.ConnectionString = sConnect
   Conn.Open

   ' Open recordset.
   Set Cmd = New ADODB.Command
   Cmd.ActiveConnection = Conn1
   Cmd.CommandText = "sp_AdoTest"
   Cmd.CommandType = adCmdStoredProc
   Cmd.Parameters.Refresh
   Cmd.Parameters(1).Value = 10
   Set Rs = Cmd1.Execute()

   ' Process results from recordset, then close it.
   Rs.Close
   Conn.Close
   Set Rs = Nothing
   Set Cmd = Nothing
   Set Conn = Nothing

Ссылка: Как вызвать хранимую процедуру с помощью запроса ADO с использованием VBA / C ++ / Java

1 голос
/ 06 июня 2011

Вы хотите взглянуть на объект ADODB.Command.Он работает аналогично объекту SqlCommand в .Net (то есть вы устанавливаете CommandText, устанавливаете CommandType и добавляете параметры, используя метод CreateParameter, который я считаю).Я уже давно использовал его.

РЕДАКТИРОВАТЬ: Забыл упомянуть, что метод Execute объекта Command возвращает вам Recordset.

...