문제

'execute as'명령을 사용하여 SQL 쿼리를 다른 로그인으로 실행하려고합니다. LINQ에서 SQL을 사용하고 있으므로 데이터 컨텍스트 클래스를 생성했으며 ExecuteQuery 메소드를 사용하여 'Execute AS'SQL 명령을 실행하고 있습니다. 그런 다음 성공적인 LINQ에서 SQL 명령을 호출합니다. 그러나 다음 오류가 발생하면 모든 후속 쿼리가 실패합니다.

현재 명령에서 심각한 오류가 발생했습니다. 결과를 버려야합니다.

내가 시도한 코드 스 니펫은 다음과 같습니다.

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

두 번째 쿼리에서 실행하더라도 위에서 오류 메시지를받습니다. 모든 도움이 감사하겠습니다.

도움이 되었습니까?

해결책

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

다른 팁

이미 이것을 배제했을 수도 있지만, 가능한 한 가지 작업은 단순히 다른 연결 문자열로 데이터 컨텍스트를 만드는 것입니다.

연결 문자열을 편집하려면 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

나는 비슷한 문제를 겪고 있었고 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();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top