2012-09-07 18 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 Server 2008/.NET 3.5のとして表値のパラメータを使用することができます....

利用可能その他のオプションは、私がcomparisonofにの3つのアプローチを持っているように、またthe guide on MSDN

をチェック複数の値(単一フィールド)をsprocに渡す(TVP vs XML vs CSV

+0

を行い、あなたの問題が解決しなければなりませんSQL Serverでは? –

+1

はい、新しいテーブルタイプ – AdaTheDev

0

一般に、データをXML文書に集め、データをNTEXTパラメータとしてデータベースに渡します。

8
  1. あなたはユーザー定義テーブル型にデータベース内のを渡したいテーブルタイプを定義する必要があります。

  2. その後、あなたはこのようにそれを渡すためにあなたのストアドプロシージャにパラメータを追加する必要があります。

    // 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(); 
    
  3. :あなたはあなたの行を設定しているとき、このようにそれを呼び出し、その後

    @YourCustomTable AS [dbo].YourCustomTable Readonly, 
    

これは私がテーブル型を作成し、構造体を定義する必要が

+0

を作成する必要があります。テーブル値付きパラメータタイプを@AdaTheDevリンクとして作成するのはそうです。 例: CREATE TYPE dbo.CategoryTableType AS TABLE (CategoryID int、CategoryName nvarchar(50)) –

関連する問題