SQL Команда «Выполнить как» и Linq to SQL - PullRequest
2 голосов
/ 14 декабря 2009

Я пытаюсь выполнить SQL-запрос как другой вход в систему, используя команду «Выполнить как». Я использую Linq to SQL, поэтому я сгенерировал класс Data Context и использую метод ExecuteQuery для запуска команды «Выполнить как». Затем я вызываю успешную команду Linq to SQL. Однако каждый последующий запрос завершается с ошибкой:

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

Вот фрагмент кода, который я пробовал:

SummaryDataContext summary = new SummaryDataContext();
summary.ExecuteQuery<CustomPostResult>(@"Execute as Login='Titan\Administrator'");
var test = summary.Customers.First();
var test2 = summary.Products.ToList();

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

Ответы [ 3 ]

2 голосов
/ 11 января 2010

Мне удалось обойти эту проблему в моем приложении, выполнив запрос с использованием классов ADO.NET.

SqlCommand cmd = new SqlCommand("EXECUTE AS USER = 'operator'");
cmd.Connection = dc.Connection as SqlConnection;
cmd.Connection.Open();
cmd.ExecuteNonQuery();

// do the rest of the queries using linq to sql
0 голосов
/ 15 февраля 2018

У меня была похожая проблема, и, посмотрев на ответ Руски, я смог выполнить «Пользователь как пользователь», но заметил, что после этого я получал ошибки при выполнении других запросов. Это было из-за пропавшего возврата. Так что для тех, у кого есть подобная проблема, вот как выглядит код.

 SqlCommand cmd = new SqlCommand("EXECUTE AS USER = 'domain\\user';");
 OSSDBDataContext dc = new OSSDBDataContext();
 cmd.Connection = dc.Connection as SqlConnection;
 cmd.Connection.Open();
 cmd.ExecuteNonQuery();

 //Execute stored procedure code goes here

 SqlCommand cmd2 = new SqlCommand("REVERT;");
 cmd2.Connection = dc.Connection as SqlConnection;
 cmd2.ExecuteNonQuery();
0 голосов
/ 15 декабря 2009

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

Чтобы редактировать строку подключения, вы можете установить свойство DataContext.Connection.ConnectionString. Я делал это раньше в частичном методе OnCreated (), который вызывается, когда создается контекст данных. Я не проверял, но я думаю, что вы также можете сделать:

YourDataContext dc = new YourDataContext();
dc.Connection.ConnectionString = "connection string here";

Вот статья, которая также описывает это - http://www.mha.dk/post/Setting-DataContext-Connection-String-at-runtime.aspx

...