Comment passer un paramètre de valeur de table à une procédure stockée à l'aide d'ADO.Net?
Créer un type dans SQL Server:
CREATE TYPE [dbo].[MyDataType] As Table
(
ID INT,
Name NVARCHAR(50)
)
Créer une procédure:
CREATE PROCEDURE [dbo].[MyProcedure]
(
@myData As [dbo].[MyDataType] Readonly
)
AS
BEGIN
SELECT * FROM @myData
END
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);
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);
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";
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>
.