16

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)

私が欲しいのは、データテーブルをこのストアドプロシージャに渡すことです。どうすればよいですか?

4

3 に答える 3

17

SQL Server 2008 / .NET 3.5 以降では、テーブル値パラメーターを使用できます。

MSDN のガイドを確認してください

また、他にも利用可能なオプションがあるため、複数の値 (単一フィールド) を sproc に渡す 3 つのアプローチ ( TVP 対 XML 対 CSV )の比較があります。

于 2012-09-07T15:00:52.183 に答える
9
  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();
    

これで問題が解決するはずです

于 2012-09-07T15:15:12.783 に答える
-2

通常、データを XML ドキュメントに送り込み、データを NTEXT パラメータとしてデータベースに渡します。

于 2012-09-07T15:04:23.407 に答える