Возник следующий вопрос
Имеется ХП:
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()
,то параметр изменяется нормально (не получаю таблицы)
вопрос: Как выполнить ХП так как она есть (получить и таблицу, и параметр одновременно)
Спасибо!