2014-06-25 170 views
0

我意識到與Windows litel節目形式C#,在MS Access數據庫保存數據。 我寫這篇文章的代碼插入到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:\Users\Zied\Documents\Visual Studio 2010\Projects\testerMSAcceess\testerMSAcceess\bin\Debug\zimed.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"); 
     } 

    } 

和「插入梅索德錯誤」 執行時,我得到這個錯誤我沒有想法插入請求的錯誤。你有一個想法

+4

可能是因爲用戶是MS Access關鍵字,所以將其放在括號內:INSERT INTO [user] –

+3

提供的代碼是否正確? 因爲當你在'try/catch'內調用'ExecuteNonQuery'時,你的連接已經關閉了。 –

回答

1

試試這個。我在查詢字符串中添加了using -statements和[] -brackets。

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

using(OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Zied\Documents\Visual Studio 2010\Projects\testerMSAcceess\testerMSAcceess\bin\Debug\zimed.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(); } } 
} 
0

OLE DB .NET提供程序使用標有問號的位置參數(?)而不是命名parameters.So,儘量使用?而不是命名參數。例如。

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

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