Frage

Ich versuche, eine SQL-Abfrage als eine andere Login ausführen mit dem Befehl ‚Ausführen als‘. Ich bin mit Linq to SQL, so dass ich einen Datenkontext Klasse generiert habe, und ich bin mit der ExecuteQuery Methode, um den ‚Ausführen als‘ SQL-Befehl auszuführen. Ich rufe dann eine Linq to SQL-Befehl, der erfolgreich ist. Schlägt jedoch fehl, jede nachfolgende Abfrage mit dem folgenden Fehler:

  

Ein schwerer Fehler ist aufgetreten auf dem aktuellen Befehl. Die Ergebnisse, wenn überhaupt, sollten verworfen werden.

Hier ist der Code-Schnipsel, dass ich versucht habe:

SummaryDataContext summary = new SummaryDataContext();
summary.ExecuteQuery<CustomPostResult>(@"Execute as Login='Titan\Administrator'");
var test = summary.Customers.First();
var test2 = summary.Products.ToList();

Egal, was ich Abfrage auf der zweiten Abfrage ausführen ich die Fehlermeldung von oben. Jede Hilfe wäre sehr geschätzt.

War es hilfreich?

Lösung

konnte ich durch Ausführen der Abfrage mit ADO.NET-Klassen dieses Problem in meiner Anwendung umgehen.

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

Andere Tipps

Sie haben vielleicht schon diese ausgeschlossen, aber eine mögliche Arbeit um wäre, einfach den Datenkontext erstellen mit einem anderen Verbindungszeichenfolge.

So bearbeiten Sie die Verbindungszeichenfolge, können Sie die DataContext.Connection.ConnectionString Eigenschaft festgelegt. Ich habe es getan, bevor sie in der partielle Methode OnCreated (), die aufgerufen wird, wenn der Datenkontext erstellt wird. Ich habe nicht getestet, aber ich denke, man könnte auch tun:

YourDataContext dc = new YourDataContext();
dc.Connection.ConnectionString = "connection string here";

Hier ist ein Artikel, der dies auch beschrieben - http://www.mha.dk/post/Setting-DataContext-Connection-String-at-runtime.aspx

Ich habe ein ähnliches Problem hat und durch in ruskey Antwort suchen konnte ich als Benutzer auszuführen, aber bemerkt, dass ich Fehler war immer, wenn andere Anfragen danach ausgeführt wird. Es war aufgrund des fehlenden Revert. Also für jemanden ein ähnliches Problem mit dieser ist, wie der Code aussieht.

 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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top