Domanda

Sto cercando di eseguire una query SQL come un altro login utilizzando il 'Esegui come' comando. Sto usando LINQ to SQL, così ho generato una classe Context dati e sto usando il metodo ExecuteQuery per eseguire il 'Esegui come' SQL comando. Ho poi chiamo un comando di LINQ to SQL che è successo. Tuttavia, ogni interrogazione successiva non riesce con il seguente errore:

  

Un grave errore durante il comando corrente. I risultati, se del caso, deve essere eliminata.

Ecco il frammento di codice che ho provato:

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

Non importa quello che ho eseguito interrogazione sulla seconda query ricevo il messaggio di errore dall'alto. Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

Sono riuscito a risolvere questo problema nella mia applicazione eseguendo la query utilizzando le classi 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

Altri suggerimenti

Si può avere già escluso questo fuori, ma una possibile aggirare sarebbe semplicemente creare il contesto dati con una stringa di connessione diversa.

Per modificare la stringa di connessione, è possibile impostare la proprietà DataContext.Connection.ConnectionString. L'ho fatto prima che nel metodo parziale OnCreated (), che viene chiamato quando il contesto dati viene creato. Non ho ancora testato, ma penso che si potrebbe anche fare:

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

Ecco un articolo che descrive questo come pure - http://www.mha.dk/post/Setting-DataContext-Connection-String-at-runtime.aspx

ho avuto un problema simile e, cercando in risposta di ruskey ero in grado di eseguire come utente, ma ho notato che mi stavo errori durante l'esecuzione di altre query dopo. E 'stato a causa della mancanza Ripristina. Quindi, per chiunque abbia un problema simile in questo modo il codice è simile.

 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();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top