rajah rajah Ответов: 2

Как передать значение списка в хранимую процедуру insert query


public void InsertDataToDb()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["connection"].
            ConnectionString;
        var records = GetRecords();

        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();

            SqlCommand cmd =
                new SqlCommand(
                    "INSERT INTO TableName (param1, param2, param3) " +
                    " VALUES (@param1, @param2, @param3)");
            cmd.CommandType = CommandType.Text;
            cmd.Connection = conn;
            cmd.Parameters.Add("@param1", DbType.String);
            cmd.Parameters.Add("@param2", DbType.String);
            cmd.Parameters.Add("@param3", DbType.String);

            foreach (var item in records)
            {
                cmd.Parameters[0].Value = item.param1;
                cmd.Parameters[1].Value = item.param2;
                cmd.Parameters[2].Value = item.param3;

                cmd.ExecuteNonQuery();
            }

            conn.Close();
        }
    }





Я хочу сделать это в хранимой процедуре . как передать список в SP в качестве параметра. кто-нибудь, пожалуйста, предложите

Что я уже пробовал:

Без преобразования списка в xml в качестве параметра. Нужно напрямую передать список в ИП.

2 Ответов

Рейтинг:
1

Christian Graus

Единственные способы передать список на SQL Server-это XML, JSON, если у вас есть 2016 год, или CSV, причем последний вариант-кошмар. Вы не можете передать в списке<t>, SQL Server не имеет понятия об этом. Ваш XML или JSON преобразуется в таблицу, таблицы-это то, о чем знает SQL Server


rajah rajah

Спасибо Крис

если мы хотим обойтись без XML ниже, то это единственное решение для передачи значений в SP . так ведь ?


создать процедуру insert_data
(
@Id int, @Name Varchar(20) , @address varchar(50)
)
начать

Вставьте в таблицу 1(Id,Name,address) значения(@Id,@Name,@address)

конец


sqlConnection con = new SqlConnection(dbConnectionString);
Sqlcommand, который комми= новая команда sqlcommand("insert_data", кон);
связь.CommandType = CommandType.Хранимая процедура;
связь.Параметры.Добавить("@Идентификатор", Значения Sqldbtype.Тип varchar).Значение = txtId.Текст;
связь.Параметры.Добавить("@Имя", Значения Sqldbtype.Типа datetime).Значение = txtName.Текст;
связь.Parameters.Add("@Address", SqlDbType.DateTime).Значение = txtaddress.Текст;
объект sqlconnection.Открыть();
ответная связь.Метод executenonquery();
объект sqlconnection.Закрывать();

Richard Deeming

Если вы используете SQL 2008 или более позднюю версию, вы также можете использовать возвращающая табличное значение параметров[^].

Рейтинг:
0

Wendelius

Лично мне нравятся табличные типизированные параметры, в основном из-за простоты использования и возможности определить точную структуру.

Например, взгляните на Как передать несколько записей в хранимую процедуру[^]