2010-11-10 124 views
18

En Visual Studio tiene el diseñador agradable que encapsula un proceso almacenado con un pequeño método ingenioso. Adoro LINQPad y lo uso a diario en el trabajo (¡no he tenido la necesidad de abrir SQL Studio para mi trabajo desde que lo estoy usando!) Y me gustaría llamar a los dispositivos almacenados mientras lo uso.¿Es posible llamar a un procedimiento almacenado utilizando LINQ en LINQPad?

Me temo que sé la respuesta a mi propia pregunta, pero espero que tal vez haya una característica que me falta o que alguien tenga algo de magia negra que puedan prestarme para que esto suceda. Por cierto, estoy usando LINQPad 4 si eso hace la diferencia.

Editar
Consulte mi respuesta a continuación.

+1

almacenado apoyo Procedimiento en LINQPad ha mejorado aún más en la versión 4.28 (www.linqpad.net/beta.aspx): se ahora admite parámetros opcionales, le permite acceder al valor de retorno + valores de parámetros de salida y le permite llamar a sys procs (como sys.sp_who2) desde cualquier base de datos. Ve a Ayuda | Qué hay de nuevo para más información. –

+0

Gracias por la información de Joe :) – jlafay

+0

Me alegro de poder ayudar. Es posible que desee tomar su sección de "respuesta" de su pregunta y publicarla como una respuesta real. Si lo hiciera, lo recomendaría, ya que agrega información útil. –

Respuesta

20

Al menos en mi copia de LINQPad, los procedimientos almacenados aparecen en la vista de árbol de la base de datos y se pueden invocar directamente.

Aquí hay una captura de pantalla:

Screenshot

+0

Tendré que probar esos nombres de método y ver si se ejecutarán si el idioma está configurado en C# Statements o C# Program. Gracias Daniel! – jlafay

-1

Puede guardar una consulta que utiliza C# con objetos ADO.NET estándar (SqlConnection, SqlCommand, etc.) y Dump() los resultados.

Me doy cuenta de que no está utilizando LINQ, pero me ha servido bien.

+0

He hecho lo mismo pero trato de usar más LINQ si es posible :) Esta pregunta es algo eso se ha quedado en mi mente por un tiempo y ahora tiende a aflorar. Así que pensé que hoy era tan bueno como cualquiera para preguntarlo. – jlafay

8

Mi respuesta (Con la ayuda de Daniel, gracias.)

Daniel me ayudó a comprender que los procedimientos almacenados pueden ser llamados si apunta a una base de datos con el lista desplegable en la ventana de consulta; luego, en la ventana de consulta, llame al proceso almacenado por su nombre y agregue paréntesis al final para llamarlo como una función.

La principal diferencia entre la versión actual (estoy usando 4.26.2 a esta fecha) es que LINQ en VS devuelve tipos de datos personalizados para que coincidan con los objetos de datos devueltos del procedimiento almacenado y LINQPad devuelve un conjunto de datos. Así que mediante la selección de "C# Declaración (s)" se puede ejecutar correctamente esto como una consulta:

DataSet fooResults = foo_stored_proc(myParam); 

Gracias por la ayuda de todos!

11

Resumiendo algunas de las otras respuestas, así como la adición de un poco de información adicional:

Conectar a la fuente de datos utilizando la defecto (LINQ to SQL) conductor. Asegúrese de que la casilla de verificación Incluir procedimientos almacenados y funciones esté marcada.

Los procedimientos y funciones almacenados ahora están disponibles como funciones .NET (por ejemplo, C#) en las consultas que utilizan la conexión. Los parámetros requeridos por la función reflejan los parámetros requeridos por el procedimiento almacenado o la función de base de datos.

El valor devuelto por la función es ReturnDataSet que es un tipo de LINQPad derivado de DataSet. Desafortunadamente no es tan fácil realizar consultas LINQ en conjuntos de datos, pero LINQPad proporciona el método de extensión AsDynamic() que tomará la primera tabla del conjunto de datos devueltos (normalmente solo hay una tabla) y convertirá las filas a IEnumerable<Object> donde los objetos en el la colección es dinámica, lo que le permite acceder a los valores de la columna como propiedades. P.ej.Si el procedimiento almacenado devuelve columnas Id y Name puede utilizar LINQ:

SomeStoredProc().AsDynamic().Where(row => row.Id == 123 && row.Name == "Foo") 

Desafortunadamente usted no tendrá IntelliSense porque los objetos de fila son dinámicos.

0

Estoy usando la versión 4.51.03 y me estoy conectando a la edición de SQL Server 2012 Express. Después de conectarme a la base de datos AdventureWorks2012, puedo ver todos los procedimientos almacenados. Al hacer clic con el botón derecho en un procedimiento almacenado y seleccionar StoredProceedureName (...) desplegable, se muestra el procedimiento almacenado en la ventana de consulta. Debe insertar los parámetros dentro del paréntesis que contiene las elipsis y ejecutar la consulta.

Se muestran ejemplos en los dos puestos siguientes:

http://hodentekmsss.blogspot.com/2015/01/learn-querying-sql-server-2012-using.html

http://hodentekmsss.blogspot.com/2015/01/learn-querying-sql-server-2012-using_25.html

Cuestiones relacionadas