web-dev-qa-db-fra.com

Passage de datatable à une procédure stockée

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?

14
user1108948

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 )

17
AdaTheDev
  1. 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.

  2. Ensuite, vous devez ajouter le paramètre dans votre procédure stockée pour le transmettre comme ceci:

    @YourCustomTable AS [dbo].YourCustomTable Readonly,
    
  3. 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

9
Tabish Sarwar