質問

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

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 つは、単に別の接続文字列を使用してデータ コンテキストを作成することです。

接続文字列を編集するには、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