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)
このストアドプロシージャにデータテーブルを渡す方法は何ですか。
SQL Server 2008/.NET 3.5以降では、テーブル値パラメーターを使用できます。
チェックアウト MSDNのガイド
また、利用可能な他のオプションがあるため、複数の値(単一フィールド)をsprocに渡す3つのアプローチを比較しています( TVP vs XML vs CSV )。
渡すテーブルタイプをデータベースに定義する必要がありますユーザー定義のテーブルタイプ。
次に、次のように渡すために、ストアドプロシージャにパラメーターを追加する必要があります。
@YourCustomTable AS [dbo].YourCustomTable Readonly,
次に、行を設定したら、次のように呼び出します。
// 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();
これで問題が解決します