Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
Имеется хранимая процедура, которая возвращает выборку из нескольких записей и один параметр. Как при помощи адаптера выполнить эту процедуру, передав в неё ряд других параметров, и получить отдельно результат селекта, который надо забиндить с DataSet и отдельно параметр, возвращаемый процедурой.

Заранее спасибо.
19 апр 06, 12:16    [2579058]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Bigheadman
Member

Откуда:
Сообщений: 2663
Просто скрестите примеры чтение резалтсета и чтения параметра:

// Создание команды
IDataReader reader = command.ExecuteReader();
// чтение resultset
reader.Close();
// чтение параметра
19 апр 06, 14:08    [2579937]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5120
adapter.SelectCommand.Parameters.Add("YourParameterName");
adapter.SelectCommand.Parameters["YourParameterName"].Direction = ParameterDirection.Output;
adaper.Fill(ds,"TableName");
object o = adapter.SelectCommand.Parameters["YourParameterName"].Value;
19 апр 06, 15:36    [2580606]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
Спасибо за ответы!
Сделал вот так:

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.
В чём причина?

Заранее спасибо.
19 апр 06, 16:21    [2580899]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
buser
Member

Откуда: Санкт-Петербург
Сообщений: 4537
cmd.Parameters.[b]Add("@NumPage", [/b]SqlDbType.Int).Direction = ParameterDirection.Input;
cmd.Parameters.[b]Add("@NumPage", [/b]SqlDbType.Int).Value=strNum;
19 апр 06, 16:24    [2580928]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5120
ну вы процедуру покажите, а то здесь медиумов нет
19 апр 06, 16:25    [2580936]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
не понял
19 апр 06, 16:26    [2580942]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
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
19 апр 06, 16:27    [2580951]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5120
а.. не обратил вниамния...
а нафиг вы по два раза параметры добавляете с одним именем?!
19 апр 06, 16:28    [2580956]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
Да, точно.

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

Formal parameter '@CountRecOnPage' was defined as OUTPUT but the actual parameter not declared OUTPUT.
19 апр 06, 16:39    [2581003]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5120
и вот это вот тавтология какая-то
SqlDataAdapter adapter = new SqlDataAdapter("", thisConnection);
adapter = new SqlDataAdapter(cmd);
не проще сразу
[SRC с№]SqlDataAdapter adapter = new SqlDataAdapter(cmd);[/SRC] ?
и перед методом Fill коннекшн открывать не нужно
Fill проверяет, открыто ли оно, если нет - отркоет, выполнит свое черное дело и закроет
19 апр 06, 16:46    [2581024]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5120
Limonad
Да, точно.

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

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


дык вы свою процедурину смотрели?
у вас параметр @CountRec оутпутный
19 апр 06, 16:47    [2581031]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
Этот параметр такой и указан при добавлении.
cmd.Parameters.Add("@CountRec", SqlDbType.Int);
        par.Direction = ParameterDirection.Output;

Он ругается на '@CountRecOnPage'.
19 апр 06, 16:51    [2581048]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5120
Limonad
Этот параметр такой и указан при добавлении.
cmd.Parameters.Add("@CountRec", SqlDbType.Int);
        par.Direction = ParameterDirection.Output;

Он ругается на '@CountRecOnPage'.

это я заметил
у вас на клиенте где-то прописывается '@CountRecOnPage' отпутным
покажите новый код
19 апр 06, 17:05    [2581139]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
Да, спасибо огромное, что помогаете. Уже сам исправил. Вот сейчас опять какая-то чушь.

Ругается на
count=(int)adapter.SelectCommand.Parameters["CountRec"].Value;

Такими вот словами

Object reference not set to an instance of an object
19 апр 06, 17:10    [2581175]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5120
млин

а так не хотите попробовать:
count=(int)adapter.SelectCommand.Parameters["@CountRec"].Value;
19 апр 06, 17:12    [2581186]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
То же исправил. Объект использовал после Dispose.
19 апр 06, 17:12    [2581190]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
winsky!
Member

Откуда: Киев
Сообщений: 5120
так че, работает уже?
19 апр 06, 17:17    [2581215]     Ответить | Цитировать Сообщить модератору
 Re: Если процедура возвращает селект и один параметр???  [new]
Limonad
Member

Откуда: Екатеринбург
Сообщений: 78
Тут ещё с гридом проблемы были и с самой процедурой. Теперь ВСЁ!!!!!!! СПАСИБО ОГРОМНОЕ, вы мне очень помогли.
19 апр 06, 17:26    [2581282]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить