2010-11-10 5 views
18

In Visual Studio hai il simpatico designer che incapsula un proc memorizzato con un piccolo metodo. Amo LINQPad e lo uso quotidianamente sul lavoro (non ho avuto bisogno di aprire SQL Studio per il mio lavoro da quando lo sto usando!) E vorrei chiamare proc memorizzati mentre lo si utilizza.È possibile chiamare una stored procedure utilizzando LINQ in LINQPad?

Temo di conoscere la risposta alla mia domanda, ma spero che forse ci sia una caratteristica che mi manca o forse qualcuno ha una magia nera che possono prestarmi per far sì che ciò accada. A proposito, sto usando LINQPad 4 se questo fa la differenza.

Modifica
Vedere la risposta seguente.

+1

stored supporto interno in LINQPad è migliorata ulteriormente nella versione 4.28 (www.linqpad.net/beta.aspx): it ora supporta i parametri opzionali, ti consente di accedere al valore restituito + i valori dei parametri di uscita e ti consente di chiamare sys procs (come sys.sp_who2) da qualsiasi database. Vai a Aiuto | Novità per maggiori informazioni. –

+0

Grazie per l'avviso Joe :) – jlafay

+0

Contento di aver potuto aiutare. Potresti voler prendere la tua sezione "risposta" della tua domanda e postarla come una risposta reale. Se lo facessi, lo invaliderei, poiché aggiunge informazioni utili. –

risposta

20

Almeno nella mia copia di LINQPad, le stored procedure vengono visualizzate nella vista ad albero del database e possono essere richiamate direttamente.

Ecco uno screenshot:

Screenshot

+0

Dovrò provare quei nomi di metodo e vedere se verranno eseguiti se la lingua è impostata su C# Statements o C# Program. Grazie Daniele! – jlafay

-1

È possibile salvare una query che utilizza C# con oggetti ADO.NET standard (SqlConnection, SqlCommand, ecc.) E Dump() i risultati.

Mi rendo conto che non sta usando LINQ, ma mi è servito bene.

+0

Ho fatto lo stesso, ma cercando di usare più LINQ se possibile :) Questa domanda è qualcosa che è rimasto bloccato nella mia mente per un po 'ora e tende a emergere. Quindi pensavo che oggi fosse bello come chiunque a chiederlo. – jlafay

8

La mia risposta (Con l'aiuto di Daniel, grazie.)

Daniel mi ha aiutato a capire che le stored procedure possono essere chiamate se si target un database con la elenco a discesa nella finestra della query; quindi nella finestra della query chiama il proc memorizzato con il suo nome e aggiungi parentesi alla fine per chiamarlo come una funzione.

La differenza principale tra la versione corrente (sto usando 4.26.2 a partire da questa data) è che LINQ in VS restituisce tipi di dati personalizzati per abbinare gli oggetti dati restituiti dalla stored procedure e LINQPad restituisce un DataSet. Quindi, selezionando "C# Statement (s)" puoi eseguire correttamente questa query come una query:

DataSet fooResults = foo_stored_proc(myParam); 

Grazie per l'aiuto di tutti!

11

Riassumendo alcune delle altre risposte, così come l'aggiunta di un po 'di informazioni aggiuntive:

connettersi all'origine dati utilizzando l'predefinito (LINQ to SQL) driver. Assicurarsi che la casella di controllo Include stored procedure e funzioni sia selezionata.

Le stored procedure e le funzioni sono ora disponibili come funzioni .NET (ad esempio C#) nelle query che utilizzano la connessione. I parametri richiesti dalla funzione riflettono i parametri richiesti dalla stored procedure o dalla funzione del database.

Il valore restituito dalla funzione è un ReturnDataSet che è un tipo LINQPad derivante da DataSet. Purtroppo non è così semplice eseguire query LINQ su set di dati, ma LINQPad fornisce il metodo di estensione AsDynamic() che prenderà la prima tabella del set di dati restituito (normalmente c'è solo una tabella) e converte le righe in IEnumerable<Object> dove gli oggetti nel la raccolta è dinamica e consente di accedere ai valori della colonna come proprietà. Per esempio.se la vostra stored procedure restituisce colonne Id e Name è possibile utilizzare LINQ:

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

Purtroppo non avrete intellisense perché gli oggetti riga sono dinamici.

0

Sto utilizzando la versione 4.51.03 e mi collego all'edizione di SQL Server 2012 Express. Dopo la connessione al database AdventureWorks2012 posso vedere tutte le stored procedure. Facendo clic con il pulsante destro del mouse su una stored procedure e scegliendo StoredProceedureName (...) nell'elenco a discesa, viene visualizzata la procedura memorizzata nella finestra della query. È necessario inserire i parametri all'interno della parentesi che contengono i puntini di sospensione ed eseguire la query.

esempi sono mostrati nelle seguenti due messaggi:

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