Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Банально вернуть output параметры SP через ADO / 2 сообщений из 2, страница 1 из 1
14.02.2007, 15:36
    #34330775
dobrik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банально вернуть output параметры SP через ADO
Приветствую всех программистов. Работаю с MSSQL2005.
Вот уже 3 дня как мучаюсь с простейшим вопросом: как вернуть значения выходных параметров хранимой процедуры через ADO. Пробовал на 3 языках (С#, C++, VB) и не получилось.
Вот скриптик простейшей процедурки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE [dbo].[xp_Operation]
@id_Operation int =  0  output
AS
BEGIN
  set @id_Operation =  100 
  SELECT  12345  as Nomerik,  1214112  as Numbik
  RETURN  0 
END
Вот пример кода на шарпе обращающегося к процедуре:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
using System;
using System.Collections.Generic;
using System.Text;
using ADODB;
using System.Windows.Forms;

namespace AdoConnect
{
  class Ado
  {
   public void InitAdoConnection()
    {
      ADODB.Command AdoCmd = new ADODB.Command();
      ADODB.Connection AdoConn = new ADODB.Connection();
      string strCnxn = "Provider=SQLOLEDB.1;Persist Security Info=False;Data Source=xxx;Integrated Security=SSPI;Initial Catalog=yyy";
      AdoConn.Open(strCnxn, null, null,  0 );
      AdoCmd.ActiveConnection = AdoConn;
      AdoCmd.CommandText = "xp_Operation";
      AdoCmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc;
      AdoCmd.Parameters.Refresh();
      object AccRef;
      object[] Param = { null };
      object paramStub = Param;
      Recordset RC = AdoCmd.Execute(out AccRef, ref paramStub,  0 ); // (out AccRef, ref AdoCmd,  0 );
      MessageBox.Show(AdoCmd.Parameters["@id_Operation"].Value.ToString());
     }
  }
}
Подскажите пожалуйста что не так ? Как получить значение 100 параметра процедуры на выходе?
Заранее благодарю всех.
...
Рейтинг: 0 / 0
14.02.2007, 16:09
    #34330932
dobrik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Банально вернуть output параметры SP через ADO
Всем спасибо. Немного полазив по MSDN удалось разобраться в чем проблема. Оказалось что из процедуры данные возвращаются потоком (сразу рекордсет, а потом последовательно выходные параметры). В итоге оказалось достаточно закрыть рекордсет и получаем нужный результат:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
using System;
using System.Collections.Generic;
using System.Text;
using ADODB;
using System.Windows.Forms;

namespace AdoConnect
{
  class Ado
  {
   public void InitAdoConnection()
    {
      ADODB.Command AdoCmd = new ADODB.Command();
      ADODB.Connection AdoConn = new ADODB.Connection();
      string strCnxn = "Provider=SQLOLEDB.1;Persist Security Info=False;Data Source=xxx;Integrated Security=SSPI;Initial Catalog=yyy";
      AdoConn.Open(strCnxn, null, null,  0 );
      AdoCmd.ActiveConnection = AdoConn;
      AdoCmd.CommandText = "xp_Operation";
      AdoCmd.CommandType = ADODB.CommandTypeEnum.adCmdStoredProc;
      AdoCmd.Parameters.Refresh();
      object AccRef;
      object[] Param = { null };
      object paramStub = Param;
      Recordset RC = AdoCmd.Execute(out AccRef, ref paramStub,  0 ); // (out AccRef, ref AdoCmd,  0 );
      RC.close();
      MessageBox.Show(AdoCmd.Parameters["@id_Operation"].Value.ToString());
     }
  }
}
Единственное что осталось для полного счастья это сделать копию рекордсета перед закрытием. Всем удачи ;)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Банально вернуть output параметры SP через ADO / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]