Est-il possible d'appeler une procédure stockée en utilisant LINQ dans LINQPad?

dans visual studio vous avez le designer sympa qui encapsule un proc stocké avec une petite méthode astucieuse. J'adore LINQPad et je l'utilise quotidiennement au travail (je n'ai pas eu besoin D'ouvrir SQL Studio pour mon travail depuis que je l'utilise!) et voudrais appeler stockées procs tout en l'utilisant.

j'ai bien peur de connaître la réponse à ma propre question mais j'espère qu'il y a peut-être une fonctionnalité qui me manque ou peut-être que quelqu'un a de la magie noire qu'ils peuvent me prêter pour faire ceci arriver. J'utilise LINQPad 4 si ça fait une différence.

Modifier

Voir ma réponse ci-dessous.

19
demandé sur jlafay 2010-11-11 00:50:45

5 réponses

au moins dans ma copie de LINQPad, les procédures stockées apparaissent dans la base de données treeview et peuvent être invoquées directement.

Voici une capture d'écran:

Screenshot

22
répondu Daniel Pryden 2010-11-10 23:23:43

résumant quelques-unes des autres réponses et ajoutant un peu d'information supplémentaire:

connectez - vous à votre source de données en utilisant le Default (LINQ to SQL) pilote. Assurez-vous que la case à cocher Inclure des Procédures Stockées et des Fonctions est cochée.

les procédures et les fonctions stockées sont maintenant disponibles en tant que fonctions .NET (par exemple C#) dans les requêtes utilisant la connexion. Les paramètres requis par la fonction reflète les paramètres requis par la procédure stockée ou une fonction base de données.

La valeur retournée par la fonction est un ReturnDataSet qui est un type LINQPad dérivé de DataSet. Malheureusement, il n'est pas si facile d'effectuer des requêtes LINQ sur des ensembles de données, mais LINQPad fournit la méthode d'extension AsDynamic() qui prendra la première table de l'ensemble de données retourné (normalement il n'y a qu'une table) et convertira les lignes en IEnumerable<Object> où les objets de la collection sont dynamiques vous permettant d'accéder à la colonne les valeurs des propriétés. E. g. si votre procédure stockée retourne les colonnes Id et Name vous pouvez utiliser LINQ:

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

malheureusement vous n'aurez pas intellisense car les objets row sont dynamiques.

13
répondu Martin Liversage 2013-10-14 13:07:51

Ma Réponse (avec L'aide de Daniel, merci.)

Daniel m'a aidé à réaliser que les procédures stockées peuvent être appelées si vous ciblez une base de données avec la liste déroulante dans la fenêtre de requête; puis dans la fenêtre de requête appeler le proc stocké par son nom et ajouter des parenthèses à la fin pour l'appeler comme une fonction.

la principale différence entre la version actuelle (j'utilise 4.26.2 à partir de cette date) est que LINQ in VS retourne des types de données personnalisés pour faire correspondre les données les objets retournés à partir de la procédure stockée et LINQPad retourne un ensemble de données. Ainsi, en sélectionnant "C # Statement(s)" vous pouvez exécuter avec succès cette requête:

DataSet fooResults = foo_stored_proc(myParam);

Merci pour l'aide de tous!

8
répondu jlafay 2010-11-11 19:39:00

j'utilise la version 4.51.03 et je me connecte à SQL Server 2012 Express edition. Après la connexion à la base de données AdventureWorks2012, je peux voir toutes les procédures stockées. Clic droit sur une procédure stockée et choisir StoredProceedureName (...) liste déroulante permet d'afficher la procédure stockée dans la fenêtre de requête. Vous devez insérer les paramètres à l'intérieur de la parenthèse contenant l'ellipse et exécuter la requête.

Exemples sont présentés dans les deux posts:

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

0
répondu user2063329 2015-01-26 02:13:25

vous pouvez simplement enregistrer une requête qui utilise C# avec standard ADO.NET objets (SqlConnection,SqlCommand, etc) et Dump() les résultats.

je me rends compte qu'il N'utilise pas LINQ, mais il m'a bien servi.

-1
répondu Steve Danner 2010-11-10 21:55:49