Выполнение хранимой процедуры
От: Abay Казахстан  
Дата: 27.07.10 05:32
Оценка:
Возник следующий вопрос
Имеется ХП:
ALTER PROCEDURE [dbo].[spAddObjectType](
    @flId as int output,
    @flName as nvarchar(30),
    @flDescription as nvarchar(200),
    @flCount as int
    )    
AS
BEGIN
    insert into tbObjectType(
    flName,
    flDescription
    )
    values (@flName,@flDescription)
    set @flId = SCOPE_IDENTITY();
    declare @temp table (ObjectId int)
    DECLARE @i int = 0
    WHILE @i < @flCount begin
            declare @ObjectId as int
        Execute spAddObject @ObjectId out, @flId, null
        insert into @temp values (@ObjectId)
        set @i =@i+1
    end
    select * from @temp as NewObjectsId
END

Возвращает таблицу и одно значение через параметр.
следующий код должен вызывать эту ХП

public List<int> AddObjectType(out int id, ObjectType objectType) {
            List<int> ret = new List<int>();
            using (var sqlConnection = new SqlConnection(_conString)) {
                var sqlCommand = new SqlCommand("spAddObjectType", sqlConnection);
                sqlCommand.CommandType=CommandType.StoredProcedure;
                if (id ==null)id= -1;
                sqlCommand.Parameters.Add(new SqlParameter("flId",DbType.Int32));
                sqlCommand.Parameters["flId"].Direction = ParameterDirection.Output;
                sqlCommand.Parameters.Add(new SqlParameter("flName", objectType.Name));
                sqlCommand.Parameters.Add(new SqlParameter("flDescription", objectType.Description));
                sqlCommand.Parameters.Add(new SqlParameter("flCount", 3));
                
                try {
                    sqlConnection.Open();
                    SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
                    id = (int)sqlCommand.Parameters["flId"].Value;
                    while (sqlDataReader.Read()) {
                        ret.Add((int)sqlDataReader[0]);
                    }
                } catch (Exception ex) {
                    throw ex;
                }
            }
            return ret;
        }


проблема: если выполняю командой
sqlCommand.ExecuteReader()

,то получаю таблицу (параметр flId не изменяется);
если выполняю
sqlCommand.ExecuteNonQuery()

,то параметр изменяется нормально (не получаю таблицы)
вопрос: Как выполнить ХП так как она есть (получить и таблицу, и параметр одновременно)
Спасибо!
с уважением, Абай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.