все,
Я хочу вставить данные из таблицы 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();
}
}
Поскольку десятичные 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);
,