2012-09-07 15 views
12

C# 'da oluşturulan bir veritabam var.Saklanan bir prosedüre geçiş verisi

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 
} 

oysa benim

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

bu saklı yordam için datatable geçmek İstediğim bir saklı yordam, nasıl?

cevap

13

yapabilirsiniz SQL Server gibi bir tablo Değerli Parametre 2008/.NET 3.5 .... kullanmak

the guide on MSDN

Ayrıca Kontrol dışarı, ben bir comparisonof 3 yaklaşımları var başka seçenekler mevcut olduğu Birden çok değeri (tek alan) bir sproc'e geçirme (TVP vs XML vs CSV)

+0

mı senin sorunun çözmelidir SQL Server'da ure? –

+1

Evet, – AdaTheDev

0

Verileri genellikle XML belgelerine aktarır ve verileri bir NTEXT parametresi olarak veritabanına aktarırız.

8
  1. Sen Kullanıcı Tanımlı Tablo Türleri veritabanınızda geçmek isteyen bir tablo türü tanımlamak gerekir.

  2. Sonra şöyle geçmek için saklı yordam parametre eklemek gerekir: Eğer satırlar kurulum olduğunda

    Sonra
    @YourCustomTable AS [dbo].YourCustomTable Readonly, 
    
  3. , böyle diyoruz:

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

Bu benim bir tablo türü oluşturmak ve yapı tanımlamak zorunda

+0

yeni bir tablo türü oluşturmanız gerekiyor. Bu, @AdaTheDev bağlantılı Tablo Değerli Parametre Türleri oluşturduğumuzda doğru. Örneğin: CREATE TYPE dbo.CategoryTableType AS TABLO (CategoryID int, CategoryName nvarchar (50)) –