powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Filling from StoredProcedure (select+output)
3 сообщений из 3, страница 1 из 1
Filling from StoredProcedure (select+output)
    #34083216
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЭстЪ StoredProcedure
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
create procedure sp_SalaryMaxListWReturn_Output
  @MaxCount int,
  @RC int output 
as
begin 
  declare
    @tmpString varchar( 256 )

  select Name, Salary 
  from Staff S 
  where (select count(distinct Salary) 
         from Staff 
         where Salary > S.Salary 
        ) < @MaxCount 
  order by Salary desc

  set @RC=@@rowcount
  set @tmpString='@@rowcount='||convert(varchar( 256 ),@RC)
  print @tmpString
  return(@RC)
end
При запуске
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
declare
  @c int,
  @r int,
  @s varchar( 256 )

exec @r=sp_SalaryMaxListWReturn_Output  3 , @c output
set @s='@r='||convert(varchar( 256 ),@r)||' @c='||convert(varchar( 256 ),@c)
print @s
видно, что возвращается два рекордсета: 1-й - сам select, 2-й - output параметр
Вот теперь это все добро нуна поднять.
Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
cmd.CommandType=CommandType.Text;
cmd.CommandText="{? = call sp_SalaryMaxListWReturn_Output(?, ?)}";
cmd.Parameters.Clear();
SPRetValue=cmd.Parameters.Add("@return",OleDbType.Integer);
SPRetValue.Direction=ParameterDirection.ReturnValue;
cmd.Parameters.Add("@MaxCount",OleDbType.Integer).Value= 3 ;
SPResult=cmd.Parameters.Add("@RC",OleDbType.Integer);
SPResult.Direction=ParameterDirection.Output;
rdr=cmd.ExecuteReader();
RetValue=Convert.ToInt32(cmd.Parameters["@return"].Value);
Res=Convert.ToInt32(SPResult.Value);
do
{
	if(rdr.HasRows)
	{
		Res= 0 ;
		while(rdr.Read())
			++Res;
	}
}while(rdr.NextResult());
rdr.Close();
// ||
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText="sp_SalaryMaxListWReturn_Output";
OleDbCommandBuilder.DeriveParameters(cmd);
cmd.Parameters["MaxCount"].Value= 4 ;
rdr=cmd.ExecuteReader();
RetValue=Convert.ToInt32(cmd.Parameters["RETURN_VALUE"].Value);
Res=Convert.ToInt32(cmd.Parameters["RC"].Value);
do
{
	if(rdr.HasRows)
	{
		Res= 0 ;
		while(rdr.Read())
			++Res;
	}
}while(rdr.NextResult());
rdr.Close();
возвращает только один рекордсет и при этом RETURN_VALUE && output параметр - null
Что где ышо нуна покрутить/подкрутить/пнуть чтобы забегало?

P.S. Самое интересное, что
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
cmd.CommandType=CommandType.Text;
cmd.CommandText="{? = call sp_SalaryMaxListWReturn_Output(?, ?)}";
cmd.Parameters.Clear();
SPRetValue=cmd.Parameters.Add("@return",OleDbType.Integer);
SPRetValue.Direction=ParameterDirection.ReturnValue;
cmd.Parameters.Add("@MaxCount",OleDbType.Integer).Value= 3 ;
SPResult=cmd.Parameters.Add("@RC",OleDbType.Integer);
SPResult.Direction=ParameterDirection.Output;
da.SelectCommand=cmd;
tbl.Reset();
da.Fill(tbl);
RetValue=Convert.ToInt32(cmd.Parameters["@return"].Value);
Res=Convert.ToInt32(SPResult.Value);
// ||
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText="sp_SalaryMaxListWReturn_Output";
OleDbCommandBuilder.DeriveParameters(cmd);
cmd.Parameters["MaxCount"].Value= 4 ;
da.SelectCommand=cmd;
tbl.Reset();
da.Fill(tbl);
RetValue=Convert.ToInt32(cmd.Parameters["RETURN_VALUE"].Value);
Res=Convert.ToInt32(cmd.Parameters["RC"].Value);
отрабатывает как нужно

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
Filling from StoredProcedure (select+output)
    #34083866
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
out & return параметры надо считывать после закрытия датаридера


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Filling from StoredProcedure (select+output)
    #34084736
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лиман Артём
out & return параметры надо считывать после закрытия датаридера

Абсолютно в дырочку

THNX
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Filling from StoredProcedure (select+output)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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