SQL'执行为'登录命令和Linq to SQL

时间:2009-12-14 16:54:30

标签: c# .net linq-to-sql execute-as

我正在尝试使用“执行为”命令执行sql查询作为另一个登录。我使用Linq to SQL,所以我生成了一个Data Context类,我使用ExecuteQuery方法运行'Execute As'SQL命令。然后我调用一个成功的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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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();