Если процедура возвращает селект и один параметр???

Limonad
Дата: 19.04.2006 12:16:25
Имеется хранимая процедура, которая возвращает выборку из нескольких записей и один параметр. Как при помощи адаптера выполнить эту процедуру, передав в неё ряд других параметров, и получить отдельно результат селекта, который надо забиндить с DataSet и отдельно параметр, возвращаемый процедурой.

Заранее спасибо.
Bigheadman
Дата: 19.04.2006 14:08:39
Просто скрестите примеры чтение резалтсета и чтения параметра:

// Создание команды
IDataReader reader = command.ExecuteReader();
// чтение resultset
reader.Close();
// чтение параметра
winsky!
Дата: 19.04.2006 15:36:54
adapter.SelectCommand.Parameters.Add("YourParameterName");
adapter.SelectCommand.Parameters["YourParameterName"].Direction = ParameterDirection.Output;
adaper.Fill(ds,"TableName");
object o = adapter.SelectCommand.Parameters["YourParameterName"].Value;
Limonad
Дата: 19.04.2006 16:21:20
Спасибо за ответы!
Сделал вот так:

SqlConnection thisConnection = new SqlConnection(strCon);
thisConnection.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "paging";
cmd.Connection = thisConnection;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@NumPage", SqlDbType.Int).Direction = ParameterDirection.Input;
cmd.Parameters.Add("@NumPage", SqlDbType.Int).Value=strNum;
cmd.Parameters.Add("@CountRecOnPage", SqlDbType.Int).Direction=ParameterDirection.Input;
cmd.Parameters.Add("@CountRecOnPage", SqlDbType.Int).Value=5;
cmd.Parameters.Add("@CountRec", SqlDbType.Int).Direction = ParameterDirection.Output;
SqlDataAdapter adapter = new SqlDataAdapter("", thisConnection);
adapter = new SqlDataAdapter(cmd);
DataTable ds = new DataTable();
adapter.Fill(ds);
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
adapter.Dispose();
count=(int)adapter.SelectCommand.Parameters["CountRec"].Value;
thisConnection.Close();

Вот при выполнении этого кода происходит ошибка на этапе:
adapter.Fill(ds);

Пишет, что Procedure or function paging has too many arguments specified.
В чём причина?

Заранее спасибо.
buser
Дата: 19.04.2006 16:24:35
cmd.Parameters.[b]Add("@NumPage", [/b]SqlDbType.Int).Direction = ParameterDirection.Input;
cmd.Parameters.[b]Add("@NumPage", [/b]SqlDbType.Int).Value=strNum;
winsky!
Дата: 19.04.2006 16:25:24
ну вы процедуру покажите, а то здесь медиумов нет
Limonad
Дата: 19.04.2006 16:26:15
не понял
Limonad
Дата: 19.04.2006 16:27:09
create procedure paging 
@NumPage int,
@CountRecOnPage int,
@CountRec int output 
as
declare @low int, @high int 
Set @CountRec=(select count(*) from id)
Set @low=@NumPage*@CountRecOnPage-@CountRecOnPage;
Set @high=@NumPage*@CountRecOnPage;
declare @t table
(IdTmp Char(10), NameTmp Char(10),
num int identity(1,1) not null)
insert into t (IdTmp, NameTmp) select * from id order by asc
select * from t where num between @low and @high
winsky!
Дата: 19.04.2006 16:28:11
а.. не обратил вниамния...
а нафиг вы по два раза параметры добавляете с одним именем?!
Limonad
Дата: 19.04.2006 16:39:02
Да, точно.

Всё исправил.
Но теперь выводит сообщение:

Formal parameter '@CountRecOnPage' was defined as OUTPUT but the actual parameter not declared OUTPUT.