Próbuję wstawić dane do serwera SQL za pomocą DataGridview. Oto, co mam teraz w moim przyciskuve_click:

string conString = "xxxxxxxx";
using (SqlConnection con = new SqlConnection(conString))
{
    con.Open();
    foreach (DataGridViewRow row in dataGridViewStock.Rows)
    {
        SqlCommand insert = new SqlCommand("INSERT INTO stock_test(size,quantity,codeArticleComponent) VALUES (@size,@quantity,@codeArticleComponent)", con);
        if (row.Cells[0].Value != null && row.Cells[1].Value != null)
        {
            insert.Parameters.AddWithValue("@size", row.Cells[0].Value);
            insert.Parameters.AddWithValue("@quantity", row.Cells[1].Value);
            insert.Parameters.AddWithValue("@codeArticleComponent", labelComponentChosen.Text);
        }
        insert.ExecuteNonQuery();
        insert.Parameters.Clear();
    }

Na razie ten kawałek kodu ma dziwne zachowanie, ponieważ rzuca wyjątek System.Data.SqlClient.SqlException : Must declare the scalar variable "@size", ale to, co napisałem w komórkach, jest nadal dodawane do bazy danych.

0
A. Petit 19 luty 2018, 12:13

2 odpowiedzi

Najlepsza odpowiedź

Bardzo prawdopodobne polecenie nie może zostać wykonane w ostatnim wierszu DataGridview, który jest zarezerwowany dla wejścia nowego elementu. a wszystkie poprzednie elementy są wkładane prawidłowo.

Zdarza się, że (row.Cells[0].Value != null && row.Cells[1].Value != null) sprawdź, aby nie dodano zwrotu false i parametry. Następne oświadczenie insert.ExecuteNonQuery(); stara się uruchomić polecenie bez wymaganych parametrów i nie powiedzie się

Utwórz i wykonaj polecenie insert tylko dla ważnych wierszy:

foreach (DataGridViewRow row in dataGridViewStock.Rows)
{
    if (row.Cells[0].Value != null && row.Cells[1].Value != null)
    {
        SqlCommand insert = new SqlCommand("INSERT INTO stock_test(size,quantity,codeArticleComponent) VALUES (@size,@quantity,@codeArticleComponent)", con);

        insert.Parameters.AddWithValue("@size", row.Cells[0].Value);
        insert.Parameters.AddWithValue("@quantity", row.Cells[1].Value);
        insert.Parameters.AddWithValue("@codeArticleComponent", labelComponentChosen.Text);

        insert.ExecuteNonQuery();
    }
}
0
ASh 19 luty 2018, 11:50
 string conString = "xxxxxxxx";
    using (SqlConnection con = new SqlConnection(conString))
    {
        con.Open();
        foreach (DataGridViewRow row in dataGridViewStock.Rows)
        {
            SqlCommand insert = new SqlCommand();

            if (row.Cells[0].Value != null && row.Cells[1].Value != null)
            {
                insert.Parameters.AddWithValue("@size", row.Cells[0].Value);
                insert.Parameters.AddWithValue("@quantity", row.Cells[1].Value);
                insert.Parameters.AddWithValue("@codeArticleComponent", labelComponentChosen.Text);
            }
            insert = ("INSERT INTO stock_test(size,quantity,codeArticleComponent) VALUES (@size,@quantity,@codeArticleComponent)", con);
            insert.ExecuteNonQuery();
            insert.Parameters.Clear();
        }

Błąd występuje, gdy używasz zmiennej przed ich deklarowaniem. Zgłaszaj je przed zastosowaniem do zapytania.

0
user5902678user5902678 19 luty 2018, 09:25