Вставка десятичных чисел из DataGridView в MySQL с помощью INSERT

0

все,

Я хочу вставить данные из таблицы DateGridView в MySQL. Он работает до сих пор, но как только есть десятичные числа, они не сохраняются как десятичные в MySQL, а как целые числа. Десятичные числа не переносятся. Я попытался преобразовать данные, но безуспешно. Они не сохраняются как десятичные числа. Спасибо за советы !!!!

Вот код

private void button2_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) // dòng
        {
            string str = "server=test; database=test; uid=test; pwd=test;";
            MySqlConnection constr = new MySqlConnection(str);
            constr.Open();
            String cmdText = "INSERT INTO KPI_Kosten (Betrag, Tower, Jahr, Periode, Land) VALUES ('"
                                       + Convert.ToDecimal(dataGridView1.Rows[i].Cells[0].Value) + "','"
                                       + dataGridView1.Rows[i].Cells[1].Value + "','"
                                       + dataGridView1.Rows[i].Cells[2].Value + "','"
                                       + dataGridView1.Rows[i].Cells[3].Value + "','"
                                       + dataGridView1.Rows[i].Cells[4].Value + "' )";
            MySqlCommand cmd = new MySqlCommand(cmdText, constr);
            cmd.ExecuteNonQuery();
            constr.Close();
        }

    }
  • 1
    Использование параметров SQL защитит вас от внедрения и, скорее всего, также решит вашу проблему
  • 0
    если ваши данные в базе данных хранятся в виде целых чисел, и вы пытаетесь передать десятичное число ... думаю, квадратный колышек, круглое отверстие ... это не сработает. Вам необходимо изменить тип данных в таблице SQL
Показать ещё 1 комментарий
Теги:
datagridview

1 ответ

0

Поскольку десятичные Betrag усекаются, потому что определение типа данных столбца задано как целое, сначала нужно изменить столбец Betrag на decimal тип данных с определенной Betrag точности и масштаба, как Betrag ниже:

ALTER TABLE KPI_Kosten MODIFY COLUMN Betrag decimal(10, 2);

Затем попробуйте настроить MySqlParameter с параметризованным запросом, чтобы ввести decimal тип данных с указанными настройками (см. Документацию):

string str = "server=test; database=test; uid=test; pwd=test;";

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
     using (MySqlConnection constr = new MySqlConnection(str))
     {
         constr.Open();

         // if '@' prefix for parameters not working, change to '?'
         String cmdText = "INSERT INTO KPI_Kosten (Betrag, Tower, Jahr, Periode, Land) VALUES (@Betrag, @Tower, @Jahr, @Periode, @Land)";

         using (MySqlCommand cmd = new MySqlCommand(cmdText, constr))
         {
            // if you're experiencing too many parameters error, uncomment this line below
            // cmd.Parameters.Clear();

            MySqlParameter betrag = new MySqlParameter("@Betrag", MySqlDbType.Decimal);

            betrag.Precision = 10;
            betrag.Scale = 2;
            betrag.Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[0].Value);

            cmd.Parameters.Add(betrag);
            cmd.Parameters.Add("@Tower", MySqlDbType.VarChar).Value = dataGridView1.Rows[i].Cells[1].Value;

            // other parameters

            cmd.ExecuteNonQuery();
         }
     }
}

Примечание. Вы также можете попробовать упрощенную версию без такой точности, как cmd.Parameters.Add("@Betrag", MySqlDbType.Decimal).Value = Convert.ToDecimal(dataGridView1.Rows[i].Cells[0].Value); ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню