代码之家  ›  专栏  ›  技术社区  ›  SaaS Developer

SQL“执行为”登录命令和LINQ to SQL

  •  2
  • SaaS Developer  · 技术社区  · 16 年前

    我正在尝试使用'execute as'命令作为另一个登录名执行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();
    

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

    3 回复  |  直到 8 年前
        1
  •  2
  •   ruskey    16 年前

    通过使用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
    
        2
  •  0
  •   grimus    16 年前

    您可能已经排除了这一点,但一个可能的解决方法是使用不同的连接字符串创建数据上下文。

    要编辑连接字符串,可以设置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

        3
  •  0
  •   Madhu    8 年前

    我遇到了一个类似的问题,通过查看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();
    
    推荐文章