1

Dans mon projet, nous utilisons Dapper pour se connecter à la base de données pour les opérations.Transférer un paramètre table à une procédure stockée

J'ai créé une procédure stockée dans ma base de données SQL Server en tant que:

CREATE PROCEDURE dbo.usp_Check 
    @TestTableType [dbo].[TestTableType] READONLY 
AS 
BEGIN 
    SELECT 
     TestTableType.BrokerNPN, 
     CASE WHEN Sales.BrokerNPN IS NULL THEN 0 ELSE 1 END as isBrokerNPNExist 
    FROM 
     [dbo].[tbl_Sales] Sales 
    LEFT JOIN 
     @TestTableType TestTableType ON Sales.BrokerNPN = TestTableType.BrokerNPN 
END 

Et en C# Je suis en train de consommer ma procédure stockée avec un PVT comme celui-ci:

public void CheckSP(List<string> ParamData) 
{ 
    using (var connection = new ConnectionProvider("DbName").GetOpenConnection()) 
    { 
     var dt = new DataTable("dbo.TestTableType"); 
     dt.Columns.Add("NPN", typeof(string)); 
     dt.Rows.Add("12345"); 

     // First attempt 
     var result = connection.Query<CheckData>("usp_Check", new { BrokerNPN = ParamData }, CommandType.StoredProcedure).ToList(); 

     // Second attempt 
     var result = connection.Query<CheckData>("usp_Check", new { BrokerNPN = dt}, CommandType.StoredProcedure).ToList(); 
    } 
} 

Mais je ne suis pas en mesure de passer le TVP à la procédure stockée.

Pour la première tentative, je reçois cette erreur

Procédure ou CheckBrokerNPNExist fonction a trop d'arguments spécifiés

Et pour la deuxième tentative, je ne peux pas utiliser passe DataTable directement.

+0

Quelle erreur se lors de l'exécution? Votre code semble éligible, il devrait exécuter la requête de procédure stockée. –

+0

Vous créez 'DataTable', mais ne l'utilisez pas – Fabio

+0

@TetsuyaYamamoto J'ai ajouté un autre moyen que j'ai essayé d'utiliser TVP en utilisant DataTable. – Rahul

Répondre

0

Utilisez le même nom de colonne dans [dbo]. [TestTableType] dans C# code

0

Je pense que vous êtes juste en utilisant un faux nom pour le paramètre ...

Voir votre procédure stockée Définition:

CREATE PROCEDURE dbo.usp_Check 
    @TestTableType [dbo].[TestTableType] READONLY 

Votre paramètre est appelé @TestTableType - mais quand vous appel cette procédure stockée de C#, vous utilisez un nom différent:

var result = connection 
       .Query<CheckData>("usp_Check", 
            new { BrokerNPN = ParamData }, 
            CommandType.StoredProcedure).ToList(); 

Je voudrais essayer d'utiliser le même nom :

var result = connection 
       .Query<CheckData>("usp_Check", 
            new { TestTableType = ParamData }, 
            CommandType.StoredProcedure).ToList(); 
+0

J'ai utilisé ceci mais j'ai toujours la même erreur. – Rahul