Циклический параметризованный запрос - PullRequest
0 голосов
/ 30 августа 2018

Я давно искал его решение, я видел подобные вопросы здесь на SO, но ответы там не решили мою проблему. В моей ситуации я хотел бы пройтись по строкам значений datagridview, чтобы вставить его в базу данных MySql. Количество строк в представлении данных будет зависеть от пользователя. Когда я пытаюсь ввести 2 или более строк значений datagridview и пытаюсь вставить их в базу данных, успешно вставляется только первая строка данных.

Вот мой код:

MySqlCommand cmd = new MySqlCommand();
                cmd.Connection = SecurityMod.dbconn();
                for (int i = 0; i < dgv_ctrl.Rows.Count; i++)
                {
                    string sql = "INSERT INTO delivery(DeliveryNumber, CreationDate, Client, Product, Price, Quantity, Total) " +
                             "VALUES(@num_Delivery, " + "@dgv_datevalue" + ", " +
                             "@name_Client" + ", " +
                             "@name_Product" + ", " +
                             "@priceof_Produt" + ", " +
                             "@quan_Product" + ", " +
                             "@price_Total" + ");";

                    cmd.Parameters.AddWithValue("@num_Delivery", num_Delivery);
                    cmd.Parameters.AddWithValue("@dgv_datevalue", DateTime.Parse(dgv_ctrl.Rows[i].Cells["Creation_Date"].Value.ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
                    cmd.Parameters.AddWithValue("@name_Client", dgv_ctrl.Rows[i].Cells["Client_name"].Value);
                    cmd.Parameters.AddWithValue("@name_Product", dgv_ctrl.Rows[i].Cells["Product_name"].Value);
                    cmd.Parameters.AddWithValue("@priceof_Produt", dgv_ctrl.Rows[i].Cells["Price_ofProduct"].Value);
                    cmd.Parameters.AddWithValue("@quan_Product", dgv_ctrl.Rows[i].Cells["Quantity_ofProduct"].Value);
                    cmd.Parameters.AddWithValue("@price_Total", dgv_ctrl.Rows[i].Cells["Total_Price"].Value);
                    cmd.CommandText = sql;
                    cmd.ExecuteNonQuery();

Ошибка: параметр '@num_Delivery' уже определен. Я новичок в использовании языка C #. Любые идеи и предложения будут приветствоваться.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Вы можете сделать это так. Это должно работать.

MySqlCommand cmd = new MySqlCommand();
cmd.Connection = SecurityMod.dbconn();
for (int i = 0; i < dgv_ctrl.Rows.Count; i++)
{
    string sql = "INSERT INTO delivery(DeliveryNumber, CreationDate, Client, Product, Price, Quantity, Total) " +
             "VALUES(@num_Delivery, " + "@dgv_datevalue" + ", " +
             "@name_Client" + ", " +
             "@name_Product" + ", " +
             "@priceof_Produt" + ", " +
             "@quan_Product" + ", " +
             "@price_Total" + ");";
    cmd.Parameter.Clear();
    cmd.Parameters.AddWithValue("@num_Delivery", num_Delivery);
    cmd.Parameters.AddWithValue("@dgv_datevalue", DateTime.Parse(dgv_ctrl.Rows[i].Cells["Creation_Date"].Value.ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
    cmd.Parameters.AddWithValue("@name_Client", dgv_ctrl.Rows[i].Cells["Client_name"].Value);
    cmd.Parameters.AddWithValue("@name_Product", dgv_ctrl.Rows[i].Cells["Product_name"].Value);
    cmd.Parameters.AddWithValue("@priceof_Produt", dgv_ctrl.Rows[i].Cells["Price_ofProduct"].Value);
    cmd.Parameters.AddWithValue("@quan_Product", dgv_ctrl.Rows[i].Cells["Quantity_ofProduct"].Value);
    cmd.Parameters.AddWithValue("@price_Total", dgv_ctrl.Rows[i].Cells["Total_Price"].Value);
    cmd.CommandText = sql;
    cmd.ExecuteNonQuery();
}
0 голосов
/ 30 августа 2018

Move

MySqlCommand cmd = new MySqlCommand();

в цикле для :

string sql = "INSERT INTO delivery(DeliveryNumber, CreationDate, Client, Product, Price, Quantity, Total) " +
             "VALUES(@num_Delivery, " + "@dgv_datevalue" + ", " +
             "@name_Client" + ", " +
             "@name_Product" + ", " +
             "@priceof_Produt" + ", " +
             "@quan_Product" + ", " +
             "@price_Total" + ");";
for (int i = 0; i < dgv_ctrl.Rows.Count; i++)
{
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = SecurityMod.dbconn();
    cmd.Parameters.AddWithValue("@num_Delivery", num_Delivery);
    cmd.Parameters.AddWithValue("@dgv_datevalue", DateTime.Parse(dgv_ctrl.Rows[i].Cells["Creation_Date"].Value.ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
    cmd.Parameters.AddWithValue("@name_Client", dgv_ctrl.Rows[i].Cells["Client_name"].Value);
    cmd.Parameters.AddWithValue("@name_Product", dgv_ctrl.Rows[i].Cells["Product_name"].Value);
    cmd.Parameters.AddWithValue("@priceof_Produt", dgv_ctrl.Rows[i].Cells["Price_ofProduct"].Value);
    cmd.Parameters.AddWithValue("@quan_Product", dgv_ctrl.Rows[i].Cells["Quantity_ofProduct"].Value);
    cmd.Parameters.AddWithValue("@price_Total", dgv_ctrl.Rows[i].Cells["Total_Price"].Value);
    cmd.CommandText = sql;
    cmd.ExecuteNonQuery();
}

или очистить его Параметры Коллекция:

string sql = "INSERT INTO delivery(DeliveryNumber, CreationDate, Client, Product, Price, Quantity, Total) " +
             "VALUES(@num_Delivery, " + "@dgv_datevalue" + ", " +
             "@name_Client" + ", " +
             "@name_Product" + ", " +
             "@priceof_Produt" + ", " +
             "@quan_Product" + ", " +
             "@price_Total" + ");";
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = SecurityMod.dbconn();
for (int i = 0; i < dgv_ctrl.Rows.Count; i++)
{
    cmd.Parameters.Clear();
    cmd.Parameters.AddWithValue("@num_Delivery", num_Delivery);
    cmd.Parameters.AddWithValue("@dgv_datevalue", DateTime.Parse(dgv_ctrl.Rows[i].Cells["Creation_Date"].Value.ToString()).ToString("yyyy-MM-dd HH:mm:ss"));
    cmd.Parameters.AddWithValue("@name_Client", dgv_ctrl.Rows[i].Cells["Client_name"].Value);
    cmd.Parameters.AddWithValue("@name_Product", dgv_ctrl.Rows[i].Cells["Product_name"].Value);
    cmd.Parameters.AddWithValue("@priceof_Produt", dgv_ctrl.Rows[i].Cells["Price_ofProduct"].Value);
    cmd.Parameters.AddWithValue("@quan_Product", dgv_ctrl.Rows[i].Cells["Quantity_ofProduct"].Value);
    cmd.Parameters.AddWithValue("@price_Total", dgv_ctrl.Rows[i].Cells["Total_Price"].Value);
    cmd.CommandText = sql;
    cmd.ExecuteNonQuery();
}

Sql строка может быть не в цикле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...