вставка в базу данных ms access

#c# #winforms #ms-access

#c# #winforms #ms-access

Вопрос:

я разрабатываю программу litel с Windows forms c #, которая сохраняет данные в базе данных ms ACCESS. я пишу этот код

 OleDbConnection connect = new OleDbConnection();
    private void button1_Click(object sender, EventArgs e)
    {
        connect.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersZiedDocumentsVisual Studio 2010ProjectstesterMSAcceesstesterMSAcceessbinDebugzimed.mdb";
        string fname = textBox1.Text;
        string lname = textBox2.Text;

        connect.Open();
        OleDbCommand cmd = new OleDbCommand(" INSERT INTO user ([nom],[prenom]) VALUES (@fname,@lname)",connect);



        if (connect.State == ConnectionState.Open)
        {
            cmd.Parameters.AddWithValue("@fname", fname);
            cmd.Parameters.AddWithValue("@lname", lname);

            cmd.ExecuteNonQuery();
            MessageBox.Show("ajout ok ");
            connect.Close();
            try
            {
                cmd.ExecuteNonQuery();
                MessageBox.Show("ajout ok ");
                connect.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("erreur"   ex.Source);
                connect.Close();
            }

        }
        else
        {
            MessageBox.Show("probleme connection");
        }

    }
  

и я получил эту ошибку при ее выполнении
«ошибка в методе вставки»
, я понятия не имею об ошибке в запросе вставки. у вас есть идея

Комментарии:

1. Возможно, user — это ключевое слово MS Access, поэтому поместите его также в скобки: ВСТАВИТЬ В [user]

2. Правильный ли приведенный код? Потому что, когда вы вызываете ExecuteNonQuery inside try/catch , ваше соединение уже закрыто.

Ответ №1:

Попробуйте это. Я добавил using -операторы и [ ] -скобки в строку запроса.

 string fname = textBox1.Text;
string lname = textBox2.Text;

using(OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersZiedDocumentsVisual Studio 2010ProjectstesterMSAcceesstesterMSAcceessbinDebugzimed.mdb"))
using(OleDbCommand cmd = new OleDbCommand("INSERT INTO [user] ([nom],[prenom]) VALUES (@fname,@lname)", conn))
{
   try
   {
      conn.Open();

      cmd.Parameters.AddWithValue("@fname", fname);
      cmd.Parameters.AddWithValue("@lname", lname);

      cmd.ExecuteNonQuery();

      MessageBox.Show("ajout ok ");
   }

   catch (Exception ex) { MessageBox.Show("Erreur"   ex.Source); }

   finally { if (conn.State == ConnectionState.Open) { conn.Close(); } }
}
  

Ответ №2:

Поставщик OLE DB .NET использует позиционные параметры, которые отмечены знаком вопроса (?) вместо именованных параметров.Итак, попробуйте использовать ? вместо именованного параметра. например.

 INSERT INTO [user] ([nom],[prenom]) VALUES (?,?)

comand.Parameters.Add("nom", OleDbType.VarChar).Value = fname;