Laden...

Dezimalzahlen von DataGridView in MySQL durch INSERT einfügen

Erstellt von der_sharky vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.058 Views
D
der_sharky Themenstarter:in
23 Beiträge seit 2017
vor 5 Jahren
Dezimalzahlen von DataGridView in MySQL durch INSERT einfügen

Hallo zusammen,

ich möchte von einer DateGridView Tabelle in MySQL Daten einfügen. Es funktioniert soweit aber sobald Dezimalzahlen gibt dann werden sie nicht als Dezimal in MySQL gespeichert sondern als ganzen Zahlen. Die Dezimalstellen werden nicht übernommen. Ich habe probiert die Daten zu konvertieren aber ohne Erfolg. Sie werden nicht als Dezimalzahlen gespeichert.
Vielen Dank für die Tipps !!!!

Hier ist der Code



using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace KPI_Kosten_Import
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            DataObject o = (DataObject)Clipboard.GetDataObject();
            if (o.GetDataPresent(DataFormats.Text))
            {
                if (dataGridView1.RowCount > 0)
                    dataGridView1.Rows.Clear();

                string[] pastedRows = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd("\r\n".ToCharArray()), "\r\n");
                int j = 0;
                foreach (string pastedRow in pastedRows)
                {
                    string[] pastedRowCells = pastedRow.Split(new char[] { '\t' });

                    dataGridView1.Rows.Add();
                    int myRowIndex = dataGridView1.Rows.Count - 1;

                    using (DataGridViewRow myDataGridViewRow = dataGridView1.Rows[j])
                    {
                        for (int i = 0; i < pastedRowCells.Length; i++)
                            myDataGridViewRow.Cells[i].Value = pastedRowCells[i];
                    }
                    j++;
                }
                int NrOfRows = dataGridView1.RowCount - 1;
                MessageBox.Show("You have inserted " + NrOfRows.ToString() + " rows in the table");




            }
        }

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

        }
    }
}


3.511 Beiträge seit 2005
vor 5 Jahren

Moin,

verwende Parameter: [Artikelserie] SQL: Parameter von Befehlen

Und trenne die Datenschicht von der UI: [Artikel] Drei-Schichten-Architektur

Gruß
Khalid

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

4.942 Beiträge seit 2008
vor 5 Jahren

Und noch ein kleiner Tipp:
Du solltest die Datenbank-Connection nur einmal öffnen (trotz ConnectionPooling) und dann die Commands in einer Schleife abarbeiten (und entsprechend der 3-Schichten-Architektur gehört dieser Code dann in die Datenzugriffsschicht).