#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
insidetry/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;