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.
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:
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.
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!
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
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.