Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Filling from StoredProcedure (select+output) / 3 сообщений из 3, страница 1 из 1
26.10.2006, 12:55
    #34083216
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Filling from StoredProcedure (select+output)
ЭстЪ 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
26.10.2006, 14:48
    #34083866
Лиман Артём
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Filling from StoredProcedure (select+output)
out & return параметры надо считывать после закрытия датаридера


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

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

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


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