Question

Je suis en train d'exécuter une requête SQL comme une autre connexion en utilisant la commande « Exécuter As ». J'utilise LINQ to SQL, donc j'ai produit une classe de contexte de données et je suis en utilisant la méthode ExecuteQuery pour exécuter le « Exécuter comme » commande SQL. Je puis appeler une commande SQL à Linq qui réussit. Cependant, chaque requête ultérieure échoue avec l'erreur suivante:

  

Une erreur grave est produite sur la commande en cours. Les résultats, le cas échéant, doivent être mis au rebut.

Voici l'extrait de code que j'ai essayé:

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

Peu importe ce que je demande sur la deuxième cours requête que je reçois le message d'erreur ci-dessus. Toute aide serait appréciée.

Était-ce utile?

La solution

J'ai réussi à contourner ce problème dans ma demande en exécutant la requête en utilisant des classes de 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

Autres conseils

Vous pouvez avoir déjà écarté cette, mais un travail possible autour serait de simplement créer le contexte de données avec une chaîne de connexion différente.

Pour modifier la chaîne de connexion, vous pouvez définir la propriété DataContext.Connection.ConnectionString. Je l'ai fait avant dans la méthode partielle OnCreated (), qui est appelée lorsque le contexte de données est créé. Je ne l'ai pas testé, mais je pense que vous pouvez aussi le faire:

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

Voici un article qui décrit aussi - http://www.mha.dk/post/Setting-DataContext-Connection-String-at-runtime.aspx

J'avais un problème similaire et en regardant la réponse de Ruskey j'ai pu exécuter en tant qu'utilisateur mais remarqué que je recevais des erreurs lors de l'exécution d'autres requêtes après. Il était dû au manque Revert. Donc, pour toute personne ayant un problème similaire voici comment le code ressemble.

 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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top