Member 10945065 Ответов: 1

Нужно получить некоторые данные из SQL, а также вставить без использования параметра out


Привет,

У меня есть хранимая процедура, которая вставляет некоторые данные в таблицу и извлекает обратно некоторые данные в sql. В интерфейсе, использующем c#, мне нужно получить обратно результирующий набор из моей процедуры и использовать его.

Какое утверждение мне нужно использовать? Я обнаружил, что executereader () - это решение, но это не работает. Я не должен использовать параметр out в sql, а также в c# в соответствии со стандартами кодирования компании. Может ли кто-нибудь объяснить это на примере?

хранимая процедура
create procedure name
@patientId
as
begin
insert into table values(a,b,c);
select * from table where value = a;
end

В С#
var reader = cp.executereader();
var a=reader["value"].tostring();

Именно так я реализовал свою функциональность (только репрезентативную).

Что я уже пробовал:

create procedure name
@patientId
as
begin
insert into table values(a,b,c);
select * from table where value = a;
end

В С#
var reader = cp.executereader();
var a=reader["value"].tostring();

Именно так я реализовал свою функциональность (только репрезентативную).

F-ES Sitecore

Ваш SP генерирует два результирующих набора. Вставка создает один (даже если она не извлекает данные, она все равно скажет вам, сколько строк было вставлено, и это генерирует результирующий набор), а выбор создает один (который содержит нужные вам данные). Затем ваш ExecuteReader читает первый набор, вставку, поэтому не видит никаких данных. Самый простой способ справиться с этим-остановить вставку, генерирующую результирующий набор, включив "NOCOUNT"

создать имя процедуры
@patientId
как
начать

УСТАНОВИТЕ NOCOUNT ON
вставить в таблицу значения (a, b, c);
выберите * из таблицы, где значение = a;
конец

Member 10945065

Спасибо за ваш ответ..Надеюсь, это сработает..Позвольте мне проверить, реализовав это.

1 Ответов

Рейтинг:
2

Mycroft Holmes

Предположим, что вы установили действительное соединение с базой данных и успешно создали запись в таблице.

После того как вы вставили запись, вы можете выбрать эту запись, и она будет возвращена в считыватель данных.

Insert TableName
(Field1,Field2)
Value (@Value1, Value2)

SET @ID = Scope_Identity() -- gets the last ID from and identity field

Select * From TableName where ID = @ID

Это действительно основной материал, который вы можете получить из любой статьи о CRUD - сделайте некоторые исследования.

Кстати, ваша хранимая процедура, как написано выше, не имеет абсолютно никакого смысла и не делает ничего из того, что вы описали.


Member 10945065

Спасибо за твой ответ, брат. Но вы не поняли моего вопроса,

Мне нужно решение на c#, которое должно вставлять и извлекать данные из БД, которые, возможно, ExecuteReader, не работали. Мне нужен рабочий образец, может быть, образец кода..Я уже упоминал, что то, что я дал, является репрезентативным, и это не актуально, поскольку я работаю в сфере здравоохранения, я не могу дать те же самые детали. Спасибо за вашу попытку.
:)