Подтвердить что ты не робот

Передача данных в хранимую процедуру

У меня есть datatable, созданный на С#.

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)

Я хочу передать данные, хранящиеся в этой хранимой процедуре, как?

4b9b3361

Ответ 1

Вы можете использовать параметр таблицы с таблицей SQL Server 2008/.NET 3.5....

Отметьте руководство по MSDN

Кроме того, поскольку есть другие доступные опции, у меня есть сравнение трех подходов к передаче нескольких значений (одно поле) в sproc (TVP vs XML vs CSV)

Ответ 2

  • Вам необходимо определить тип таблицы, который вы хотите передать в Определенные пользователем типы таблиц в своей базе данных.

  • Затем вам нужно добавить параметр в свою сохраненную процедуру, чтобы передать его следующим образом:

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

Это должно решить вашу проблему.

Ответ 3

Мы обычно сжимаем данные в XML-документы и передаем данные в базу данных как параметр NTEXT.