Pregunta

Estoy tratando de ejecutar una consulta SQL como otra entrada a través del 'Ejecutar Como' comando. Estoy utilizando LINQ a SQL, por lo que he generado una clase de contexto de datos y estoy usando el método ExecuteQuery para ejecutar el comando 'Ejecutar Como' SQL. entonces yo llamo un comando de LINQ to SQL que tiene éxito. Sin embargo, cada consulta posterior falla con el siguiente error:

  

Se ha producido un error grave en el comando actual. Los resultados, en su caso, deben ser desechados.

Aquí está el fragmento de código que he intentado:

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

No importa lo consulta Corro en la segunda consulta que reciba el mensaje de error desde arriba. Cualquier ayuda sería apreciada.

¿Fue útil?

Solución

He conseguido evitar este problema en mi aplicación mediante la ejecución de la consulta utilizando ADO.NET clases.

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

Otros consejos

Ya ha descartado esta posibilidad, pero un trabajo posible alrededor sería simplemente crear el contexto de datos con una cadena de conexión diferente.

Para modificar la cadena de conexión, se puede establecer la propiedad DataContext.Connection.ConnectionString. Yo he hecho antes en el método parcial OnCreated (), que se llama cuando el contexto de datos se crea. No he probado, pero creo que también se puede hacer:

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

Aquí está un artículo que describe este también - http://www.mha.dk/post/Setting-DataContext-Connection-String-at-runtime.aspx

Yo estaba teniendo un problema similar y examinado la respuesta de Ruskey yo era capaz de ejecutar como usuario pero me di cuenta que estaba recibiendo errores al ejecutar otras consultas después de eso. Fue debido a la falta Revert. Así que para cualquier persona que tiene un problema similar así es como el código es el siguiente.

 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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top