Insert MYSQL

0

Witam,
mam problem z wstawieniem danych do bazy MYSQL.

string StrQuery1;
            try
            {
                
                using (MySqlConnection conn1 = new MySqlConnection(connectionString))
                {
                    using (MySqlCommand comm1 = new MySqlCommand())
                    {
                        
                        comm1.Connection = conn1;
                        conn1.Open();
                        comm1.Parameters.AddWithValue("@d_wy", DateTime.Today);
                        comm1.Parameters.AddWithValue("@d_wa", dateTimePicker_oferta_datawaznoscioferty.Value.Date);
                        comm1.Parameters.AddWithValue("@im_kl", comboBox_oferta_klient_imienazwisko.Text);
                        comm1.Parameters.AddWithValue("@na_fir_kl", comboBox_oferta_klient_nazwafirmy.Text);
                        comm1.Parameters.AddWithValue("@im_pr", comboBox_imie_pracownika.Text);
                        comm1.Parameters.AddWithValue("@ma_pr",textBox_mail_pracownika.Text);
                        comm1.Parameters.AddWithValue("@tl_pr",textBox_tel_pracownika.Text);
                        comm1.Parameters.AddWithValue("@ty_of",textBox_tytuloferty.Text);
                        comm1.Parameters.AddWithValue("@ce_net_wsz",textBox_oferta_cenanettolacznie.Text);
                        comm1.Parameters.AddWithValue("@ce_bru_wsz",textBox_oferta_cenabruttolacznie.Text);
                        
                        for (int j = 0; j < dataGridView_oferta.Rows.Count - 1; j++)
                        {
                            StrQuery1 = @"INSERT INTO current (d_wy , d_wa , im_kl , na_fir_kl , im_pr ,ma_pr, tl_pr , ty_of , na_pro , il , ce_net_szt , ce_net_lac , ce_net_wsz , ce_bru_wsz) VALUES (@d_wy , @d_wa , @im_kl , @na_fir_kl , @im_pr ,@ma_pr , @tl_pr , @ty_of , '" + dataGridView_oferta.Rows[j].Cells["Opis"].Value + "','" + dataGridView_oferta.Rows[j].Cells["Ilosc"].Value + "','" + Convert.ToString(dataGridView_oferta.Rows[j].Cells["CenaNettoSzt"].Value).Replace(',', '.') + "','" + Convert.ToString(dataGridView_oferta.Rows[j].Cells["CenaNettoLacznie"].Value).Replace(',', '.') + "';";
                            comm1.CommandText = StrQuery1;
                            comm1.ExecuteNonQuery();
                        }
                        conn1.Close();
                    }
                }
                
            }

Dostaje błąd, że jest problem w linijce w której jest insert.

0

Załóż breakpointa na linijkę comm1.CommandText = StrQuery1; i pokaż co masz w StrQuery1.
Dobrze by było gdybyś zdradził strukturę tej tabeli.

0

"INSERT INTO current_off (d_wy , d_wa , im_kl , na_fir_kl , im_pr ,ma_pr, tl_pr , ty_of , na_pro , il , ce_net_szt , ce_net_lac , ce_net_wsz , ce_bru_wsz) VALUES (@d_wy , @d_wa , @im_kl , @na_fir_kl , @im_pr ,@ma_pr , @tl_pr , @ty_of , 'Komputer','2','2.22','4.44',@ce_net_wsz,@ce_bru_wsz;"

To jest zawartość StrQuery1

0

Pierwsze co rzuciło mi się w oczy to brak nawiasu zamykającego.

Czemu nie przekażesz wartości w pętli przez parametry tylko bawisz się z replace?

0

Faktycznie ... teraz działa. Nie za bardzo rozumiem o co Ci chodzi. replace używam, ponieważ z C# jest przekazywana wartość 4,44, a mysql ogarnia to jako 4.00 więc muszę zamienić przecinek na kropkę by mysql wziął to jako 4.44.

0

Nie musisz :).

Coś takiego możesz zrobić (pisane w notatniku, więc mogą być błędy).
```csharp
try
{
using (MySqlConnection conn1 = new MySqlConnection(connectionString))
{
using (MySqlCommand comm1 = new MySqlCommand())
{

                    comm1.Connection = conn1;
                    conn1.Open();
                    comm1.Parameters.AddWithValue("@d_wy", DateTime.Today);
                    comm1.Parameters.AddWithValue("@d_wa", dateTimePicker_oferta_datawaznoscioferty.Value.Date);
                    comm1.Parameters.AddWithValue("@im_kl", comboBox_oferta_klient_imienazwisko.Text);
                    comm1.Parameters.AddWithValue("@na_fir_kl", comboBox_oferta_klient_nazwafirmy.Text);
                    comm1.Parameters.AddWithValue("@im_pr", comboBox_imie_pracownika.Text);
                    comm1.Parameters.AddWithValue("@ma_pr",textBox_mail_pracownika.Text);
                    comm1.Parameters.AddWithValue("@tl_pr",textBox_tel_pracownika.Text);
                    comm1.Parameters.AddWithValue("@ty_of",textBox_tytuloferty.Text);
                    comm1.Parameters.AddWithValue("@ce_net_wsz",textBox_oferta_cenanettolacznie.Text);
                    comm1.Parameters.AddWithValue("@ce_bru_wsz",textBox_oferta_cenabruttolacznie.Text);
                    comm1.Parameters.Add("@cenaNettoSztuka", SqlDbType.Real);
                    for (int j = 0; j < dataGridView_oferta.Rows.Count - 1; j++)
                    {
                        StrQuery1 = @" INSERT INTO current (d_wy , d_wa , im_kl , na_fir_kl , im_pr ,ma_pr, tl_pr , ty_of , na_pro , il , ce_net_szt , ce_net_lac , ce_net_wsz , ce_bru_wsz) VALUES (@d_wy , @d_wa , @im_kl , @na_fir_kl , @im_pr ,@ma_pr , @tl_pr , @ty_of , '" + dataGridView_oferta.Rows[j].Cells["Opis"].Value + "','" + dataGridView_oferta.Rows[j].Cells["Ilosc"].Value + ", @cenaNettoSztuka, "+ Convert.ToString(dataGridView_oferta.Rows[j].Cells["CenaNettoLacznie"].Value).Replace(',', '.') + "';";
                        comm1.Parameters["@cenaNettoSztuka"] = Convert.ToDouble(dataGridView_oferta.Rows[j].Cells["CenaNettoSzt"].Value);
                        comm1.CommandText = StrQuery1;
                        comm1.ExecuteNonQuery();
                    }
                    conn1.Close();
                }
            } 
        }
0

Dzięki, jak tylko uporam się z tworzeniem PDF z danymi z bazy MYSQL, to przetestuję to rozwiązanie.

0

To musi tak być zrobione? nie można po prostu użyć interpolacji stringów i heja?

0

OT. To wygląda jak ladowanie danych z jakiegoś excela do sqla. Ja bym zrobił osobny model do odczytu z xlsx i z tego modelu ladowal do sqla.

0

@jacek.placek:

int temperature = 20;
string location_of_my_house = "xyz";

string output = $"My super house is located at {location_of_my_house} and current temperature inside is: {temperature}";
1
WeiXiao napisał(a):

To musi tak być zrobione? nie można po prostu użyć interpolacji stringów i heja?

Hmmm, Kolega słyszał o SQL injection ?

0
W2K napisał(a):
WeiXiao napisał(a):

To musi tak być zrobione? nie można po prostu użyć interpolacji stringów i heja?

Hmmm, Kolega słyszał o SQL injection ?

comm1.Parameters.AddWithValue("@im_kl", comboBox_oferta_klient_imienazwisko.Text);
string StrQuery1 = "";
comm1.CommandText = StrQuery1;

Ten sposób zapobiega?

#Edit najwidoczniej tak, dzięki

myślałem, że to tylko wstawianie wartości

1 użytkowników online, w tym zalogowanych: 0, gości: 1