2009-12-14 59 views
2

我試圖執行一個sql查詢作爲另一個登錄使用'執行作爲'命令。我正在使用Linq to SQL,所以我生成了一個Data Context類,並且正在使用ExecuteQuery方法來運行'Execute As'SQL命令。然後我調用一個成功的Linq to SQL命令。然而,每一個後續查詢失敗,出現以下錯誤:SQL'執行爲'登錄命令和Linq到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 2014-01-30 14:43:35

0

我有一個類似的問題,並通過查看ruskey的回答,我能夠執行的用戶,但注意到運行後,其他查詢時,我漸漸的錯誤。這是由於缺少Revert。所以對於任何有類似問題的人來說,這就是代碼的樣子。

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