我试图执行使用“执行作为”命令的SQL查询作为另一个登录。我使用LINQ to 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