2

我正在尝试使用“执行为”命令将 sql 查询作为另一个登录名来执行。我正在使用 Linq to SQL,所以我生成了一个数据上下文类,并且我正在使用 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();

无论我在第二个查询上运行什么查询,我都会从上面收到错误消息。任何帮助,将不胜感激。

4

3 回答 3

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
于 2010-01-11T13:09:49.083 回答
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

于 2009-12-14T23:05:38.953 回答
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();
于 2018-02-15T14:19:48.857 回答