"Nieprawidłowy format ciągu wejścowego" podczas inserta do tabeli

0

Cześć,

mam problem z poniższym kodem, a konkretnie z linijką:

 komenda.ExecuteNonQuery();

Nie mam pojęcia dlaczego insert nie chce się wykonać i pojawia się exception:

"Nieprawidłowy format ciągu wejściowego".

Tabela, do której chce zrobić insert ma 3 kolumny: id (int primary key auto_increment), id_sekcji (int), opis (text).
Bardzo proszę o jakąkolwiek pomoc i z góry dziękuję za wszystkie wskazówki.

public static void WprowadzWymaganieDoBazy(List<string> symbole, List<string> wymagania)
        {
                string myConnection = "datasource=localhost;port=3306;username=root;password=root";
                MySqlConnection myConn = new MySqlConnection(myConnection);
                MySqlCommand komenda = new MySqlCommand();
                string insert = "";


            try
            {
                if (myConn.State == ConnectionState.Closed)
                    myConn.Open();

                for (int i = 0; i < symbole.Count; i++)
                {
                    string pierwsza_litera = symbole[i];

                     switch((char)pierwsza_litera[0]){

                         case 'W': 
                    insert = "insert into karty.wymaganie(opis, id_sekcji) values(@Opis, @Id_sekcji)";
                    komenda.Connection = myConn;
                    komenda.CommandText = insert;
                    komenda.Parameters.AddWithValue("@Opis", MySqlDbType.Text).Value = wymagania[i];
                    komenda.Parameters.AddWithValue("@Id_sekcji",MySqlDbType.Int32).Value = 1;
                    komenda.ExecuteNonQuery();
                    break;

                         case 'U':
                    insert = "insert into karty.wymaganie(opis, id_sekcji) values(@Opis, @Id_sekcji)";
                    komenda.Connection = myConn;
                    komenda.CommandText = insert;
                    komenda.Parameters.AddWithValue("@Opis", MySqlDbType.Text).Value = wymagania[i];
                    komenda.Parameters.AddWithValue("@Id_sekcji",MySqlDbType.Int32).Value = 2;
                    komenda.ExecuteNonQuery();
                    break;

                         case 'K':
                    insert = "insert into karty.wymaganie(opis, id_sekcji) values(@Opis, @Id_sekcji)";
                    komenda.Connection = myConn;
                    komenda.CommandText = insert;
                    komenda.Parameters.AddWithValue("@Opis", MySqlDbType.Text).Value = wymagania[i];
                    komenda.Parameters.AddWithValue("@Id_sekcji",MySqlDbType.Int32).Value = 3;
                    komenda.ExecuteNonQuery();
                    break;
                     }
                }


            }
            catch(Exception ex)
            {
                string blad = string.Format("Bląd podczas zapisu: {0}", ex.Message);
                MessageBox.Show(blad, "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                myConn.Close();
            }


        }
1

Witam,

A to dodawanie parametrów to dobrze zrobiłeś?

command.Parameters.Add("@par", MySqlDbType.Type).Value = value;

lub

command.Parameters.AddWithValue("@par", value);

Pozdrawiam,

mr-owl

P.S. A gdybyś samo dodawanie do bazy wrzucił do osobnej metody a switch-a wywoływał gdzieś indziej to coś by się stało? Stosowanie using także bardzo nie boli a i kod jest czytelniejszy.

public void AddToDb(string opis, int id)
{
using(var connection = new MySqlConnection("datasource=localhost;port=3306;username=root;password=root"))
{
connection.Open();

using(var command = connection.CreateCommand())
{
command.CommandText = "INSERT INTO karty.wymaganie(opis, id_sekcji) VALUES (@Opis, @Id_sekcji)";
command.Parameters.AddWithValue("@Opis", opis);
command.Parameters.AddWithValue("@Id_sekcji", id);
command.ExecuteNonQuery()
}
}
}

0

Masz rację, źle zrobiłam dodawanie parametrów.
Po poprawieniu tego i dodaniu czyszczenia parametrów przy każdej iteracji

komenda.Parameters.Clear();

wszystko działa poprawnie :)

Bardzo dziękuję za pomoc i wskazówki.

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