J'ai une table de données créée en C #.
using (DataTable dt = new DataTable())
{
dt.Columns.Add("MetricId", typeof(int));
dt.Columns.Add("Descr", typeof(string));
dt.Columns.Add("EntryDE", typeof(int));
foreach (DataGridViewRow row in dgv.Rows)
{
dt.Rows.Add(row.Cells[1].Value, row.Cells[2].Value, row.Cells[0].Value);
}
// TODO: pass dt
}
Et j'ai une procédure stockée
CREATE PROCEDURE [dbo].[Admin_Fill]
-- Add the parameters for the stored procedure here
@MetricId INT,
@Descr VARCHAR(100),
@EntryDE VARCHAR(20)
Ce que je veux c'est passer le datatable à cette procédure stockée, comment?
Vous pouvez utiliser un paramètre de valeur de table à partir de SQL Server 2008/.NET 3.5 ....
Découvrez le guide sur MSDN
De plus, comme il existe d'autres options disponibles, j'ai une comparaison de 3 approches de passage de plusieurs valeurs (champ unique) à un sproc ( TVP vs XML vs CSV )
Vous devez définir un type de table que vous souhaitez transmettre Types de table définis par l'utilisateur dans votre base de données.
Ensuite, vous devez ajouter le paramètre dans votre procédure stockée pour le transmettre comme ceci:
@YourCustomTable AS [dbo].YourCustomTable Readonly,
Ensuite, lorsque vous avez configuré vos lignes, appelez-le comme ceci:
// Setup SP and Parameters
command.CommandText = "YOUR STORED PROC NAME";
command.Parameters.Clear();
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@someIdForParameter", someId);
command.Parameters.AddWithValue("@YourCustomTable",dtCustomerFields).SqlDbType = SqlDbType.Structured;
//Execute
command.ExecuteNonQuery();
Cela devrait résoudre votre problème