web-dev-qa-db-fra.com

Passer le paramètre de valeur de table à l'aide d'ADO.Net

Comment passer un paramètre de valeur de table à une procédure stockée à l'aide d'ADO.Net?

42
NIck
  1. Créer un type dans SQL Server:

    CREATE TYPE [dbo].[MyDataType] As Table
    (
        ID INT,
        Name NVARCHAR(50)
    )
    
  2. Créer une procédure:

    CREATE PROCEDURE [dbo].[MyProcedure]
    (
        @myData As [dbo].[MyDataType] Readonly
    )
    AS
    
    BEGIN
        SELECT * FROM @myData
    END
    
  3. Créer DataTable en C #:

    DataTable myDataTable = new DataTable("MyDataType");
    myDataTable.Columns.Add("Name", typeof(string));
    myDataTable.Columns.Add("Id", typeof(Int32));
    myDataTable.Rows.Add("XYZ", 1);
    myDataTable.Rows.Add("ABC", 2);
    
  4. Créer un paramètre SQL:

    SqlParameter parameter = new SqlParameter();
    parameter.ParameterName = "@myData";
    parameter.SqlDbType = System.Data.SqlDbType.Structured;
    parameter.Value = myDataTable;
    command.Parameters.Add(parameter); 
    
69
Naresh Goradara

J'ai essayé cela et j'ai reçu l'exception:

Le paramètre de type de table '@MyDataType' doit avoir un nom de type valide.

J'ai dû définir la propriété "TypeName" du SqlParameter:

parameter.TypeName = "MyDataType";
15
Matt Martin

Cette question est un doublon de Comment passer des paramètres de valeur de table à la procédure stockée à partir du code .net . Veuillez consulter cette question pour un exemple illustrant l'utilisation d'un DataTable ou d'un IEnumerable<SqlDataRecord>.

0
Ryan Prechel