2

「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 番目のクエリでどのクエリを実行しても、上記のエラー メッセージが表示されます。どんな助けでも大歓迎です。

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

既にこれを除外している可能性がありますが、考えられる回避策の 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

于 2009-12-14T23:05:38.953 に答える