CSharp: Как сделать так, чтобы команда объявления / установки SQL сохранялась в SQLConnection? - PullRequest
0 голосов
/ 16 марта 2011

У меня есть класс, который содержит все мои объекты SQL, включая методы для подключения к базе данных и выполнения запроса.

Из другого класса я создаю экземпляр этого объекта "базы данных" и выполняюзапрос для установки значения для переменной, которую я хочу оставить установленным на протяжении оставшейся части моих запросов по этому соединению:

DECLARE @InstitutionId NVARCHAR(MAX);
SET @InstitutionId ='15';

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

Таким образом, может показаться, что после выполнения второго запроса результаты первого были потеряны.Могу ли я в любом случае сохранить вышеупомянутое, или я должен включать команды Declare и Set в каждый выполняемый запрос?Когда я делаю это в Microsoft SQL Server Management Studio, мне нужно только запустить его один раз, и он останется для всех запросов в моем окне запросов, поэтому я подумал (возможно, наивно), что результаты останутся.

Спасибо,

Джейсон

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Если не считать его в БД, вы не можете. Оператор содержит состояние, а не соединение с базой данных. Как только он выходит из области видимости, у вас ничего нет. Представьте команду «go» в конце инструкции, по сути, ее эквивалент.

0 голосов
/ 16 марта 2011

Нет, объем запроса будет действителен только в течение срока действия запроса.Помните, например, что большинство драйверов коннектов SQL будут повторно использовать соединения из пула соединений, поэтому было бы невозможно (для SQL и для вашего приложения) отслеживать, какой запрос приходит из какого предыдущего контекста.

В зависимости отТочные требования вашего приложения вы, я бы добавил InstitutionId в качестве члена / свойства вашего класса базы данных.Затем класс базы данных отвечает за отправку значения этого члена в качестве параметра запроса для каждого запроса:

например.

   command.Parameters.AddWithValue("@InstitutionId",this.InstitutionId);
...