2012-09-07 27 views
12

Tengo una tabla de datos creada en C#.Pasar datatable a un procedimiento almacenado

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 stored 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?

Respuesta

13

Se puede utilizar un parámetro valorado como tabla de SQL Server 2008/.NET 3.5 ....

Salida the guide on MSDN

También, ya que hay otras opciones disponibles, tengo un comparisonof 3 enfoques de pasando múltiples valores (campo único) a un sproc (TVP vs XML vs CSV)

+0

¿tengo que crear un tipo de tabla y definir la estructura ure en SQL Server? –

+1

Sí, necesitamos crear una nueva tabla tipo – AdaTheDev

0

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

8
  1. es necesario definir un tipo de tabla que desea pasar en tipos de tablas definidas por el usuario en su base de datos.

  2. Luego hay que añadir el parámetro en el procedimiento almacenado para pasarlo en la siguiente manera:

    @YourCustomTable AS [dbo].YourCustomTable Readonly, 
    
  3. Entonces, cuando usted tiene su configuración de filas, lo llaman así:

    // 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(); 
    

Esto debería resolver su problema

+0

Eso es correcto si creamos tipos de parámetros con valores de tabla como @AdaTheDev vinculados. por ejemplo: CREAR TIPO dbo.CategoryTableType AS TABLE (CategoryID int, CategoryName nvarchar (50)) –

Cuestiones relacionadas