2009-12-14 2 views
2

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

A severe error occurred on the current command. The results, if any, should be discarded.

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

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

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

ответ

2

мне удалось обойти эту проблему в моем приложении, выполнив запрос с помощью 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

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

Для редактирования строки подключения вы можете установить свойство 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

+0

Другая строка подключения ... означает, что вы сохранили пароль пользователя в виде обычного текста, чтобы вы могли использовать его для подключения к базе данных? – Crisfole

0

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

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();