2012-09-07 6 views
12

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 
} 

그리고 내가 가지고있는

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

이 저장 프로 시저에 데이터 테이블을 통과 내가 원하는 수있는 저장 프로 시저, 어떻게?

답변

13

할 수 있습니다 SQL 서버의 같은 테이블 반환 매개 변수 2008/.NET 3.5을 .... 사용

the guide on MSDN

또한 체크 아웃, 나는 comparisonof에게 3 개 접근법이가 다른 옵션을 사용할 수로 여러 값 (단일 필드)을 sproc (TVP vs XML vs CSV)로 전달

+0

이 수행 문제 해결해야 SQL Server에서? –

+1

예, 새 테이블 유형을 작성해야합니다 – AdaTheDev

0

일반적으로 데이터를 XML 문서로 채우고 데이터를 NTEXT 매개 변수로 데이터베이스에 전달합니다.

8
  1. 당신은 당신이 사용자 정의 테이블 형식 데이터베이스의에 전달하려는 테이블 유형을 정의 할 필요가있다.

  2. 그런 다음이처럼에 전달하여 저장 프로 시저에 매개 변수를 추가해야합니다 : 당신이 당신의 행 설정이있을 때

    다음
    @YourCustomTable AS [dbo].YourCustomTable Readonly, 
    
  3. , 다음과 같이 호출 :

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

이것은 내가 테이블 유형을 작성하고 구조체를 정의해야

+0

테이블 값 매개 변수 유형을 @AdaTheDev 링크로 작성하는 경우 적합합니다. 예 : CREATE TYPE dbo.CategoryTableType AS TABLE (CategoryID int, CategoryName nvarchar (50)) –

관련 문제