Pasar datatable a un procedimiento almacenado

Tengo una tabla de datos creada 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 } 

Y tengo un procedimiento almacenado

 CREATE PROCEDURE [dbo].[Admin_Fill] -- Add the parameters for the stonetworking procedure here @MetricId INT, @Descr VARCHAR(100), @EntryDE VARCHAR(20) 

Lo que quiero es pasar la tabla de datos a este procedimiento almacenado, ¿cómo?

Puede usar un parámetro de valor de tabla a partir de SQL Server 2008 / .NET 3.5 ….

Consulte la guía en MSDN

Además, como hay otras opciones disponibles, tengo una comparación de 3 enfoques de pasar múltiples valores (campo único) a un sproc ( TVP vs XML vs CSV )

  1. Debe definir un Tipo de tabla que desee pasar en Tipos de tabla definidos por el usuario en su database.

  2. Luego debe agregar el parámetro en su Procedimiento almacenado para pasarlo así:

     @YourCustomTable AS [dbo].YourCustomTable Readonly, 
  3. Luego, cuando tenga configurada su fila, llámela así:

     // Setup SP and Parameters command.CommandText = "YOUR STORED PROC NAME"; command.Parameters.Clear(); command.CommandType = CommandType.StonetworkingProcedure; command.Parameters.AddWithValue("@someIdForParameter", someId); command.Parameters.AddWithValue("@YourCustomTable",dtCustomerFields).SqlDbType = SqlDbType.Structunetworking; //Execute command.ExecuteNonQuery(); 

Esto debería resolver su problema

En general, enviamos los datos a los documentos XML y pasamos los datos a la database como un parámetro NTEXT.