Comment faire en sorte que le composant C # Query reconnaisse les données renvoyées par les colonnes d'une table temporaire dans une procédure stockée SQL
-
03-07-2019 - |
Question
J'ai créé une procédure stockée similaire à celle ci-dessous (j'utilise cette version simplifiée pour essayer de comprendre le problème).
CREATE PROCEDURE bsp_testStoredProc
AS
BEGIN
CREATE TABLE #tmpFiles
(
AuthorName NVARCHAR(50),
PercentageHigh INT
)
-- Insert data into temp table
SELECT AuthorName, PercentageHigh FROM #tmpFiles
ORDER BY PercentageHigh DESC
DROP TABLE #tmpFiles
RETURN 0
END
À partir de mon code C # dans VS2008, j'essaie d'utiliser le composant Query avec l'option Utiliser une procédure stockée existante pour le connecter à un DataTable / DataGridView afin d'afficher les résultats.
Toutefois, étant donné que je sélectionne dans une table temporaire, dans les propriétés du composant Query, Visual Studio n'affiche pas les colonnes renvoyées par la procédure stockée. Je suppose qu’il a du mal à déterminer les types de données utilisés, car le SP n’est pas basé sur un schéma réel.
La connexion à différentes procédures stockées qui sélectionnent dans des tables réelles affiche les colonnes correctement.
Est-ce que quelqu'un sait tout autour de ça? Y a-t-il une sorte d'indice que je peux ajouter quelque part pour indiquer explicitement quelle sorte de données sera renvoyée?
Merci d'avance.
La solution
Pour plus d'informations, vous pouvez envisager d'utiliser une "variable de table". plutôt qu'une table temporaire (par exemple, @FOO plutôt que #FOO) - cela pourrait aider un peu, et cela aide certainement quelques problèmes de tempdb.
Avec les tables temporaires - non, il n’existe aucun moyen de déclarer explicitement le schéma SPs. Je suggérerais peut-être d’utiliser une version simplifiée du SP pendant que vous générez vos classes wrapper - c’est-à-dire qu’il fasse un SELECT trivial de la forme correcte.
Sinon, j'utiliserais LINQ pour utiliser un fichier UDF, ce qui a un schéma explicite.