2017-07-25 92 views
0

我想从Visual Studio添加数据到C#中访问。每次点击按钮保存数据时都会弹出一条错误消息,提示“Microsoft数据库引擎”。我不知道问题出在哪里。我粘贴下面的代码:Microsoft Access引擎

private void btnsave_Click(object sender, EventArgs e) 
    { 

     OleDbConnection conn = new OleDbConnection(); 
     conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\My Monroe\Semester 5\Advanced Programming\Final Project\WindowsFormsApplication1\WindowsFormsApplication1\Final exam .accdb"; 
     string fname = first_NameTextBox.Text; 
     string lname = last_NameTextBox.Text; 
     string snum = sSNTextBox.Text; 
     string city = cityTextBox.Text; 
     string state = stateTextBox.Text; 
     string telnum = telephone__TextBox.Text; 
     OleDbCommand cmd = new OleDbCommand("INSERT into Customers(First Name, Last Name, SSN,City,State,Telephone#)" + " values(@fname,@lname,@snum,@city,@state,@telnum)", connect); 
     cmd.Connection = conn; 
     conn.Open(); 
     if (conn.State == ConnectionState.Open) 
     { 
      cmd.Parameters.Add("@fname", OleDbType.Char, 20).Value = fname; 
      cmd.Parameters.Add("@lname", OleDbType.Char, 20).Value = lname; 
      cmd.Parameters.Add("@snum", OleDbType.Numeric, 20).Value = snum; 
      cmd.Parameters.Add("@city", OleDbType.Char, 20).Value = city; 
      cmd.Parameters.Add("@state", OleDbType.Char, 20).Value = state; 
      cmd.Parameters.Add("@telnum", OleDbType.Numeric, 20).Value = telnum; 
      try 
      { 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Data Added"); 
       conn.Close(); 
      } 
      catch (OleDbException ex) 
      { 
       MessageBox.Show(ex.Source); 
       conn.Close(); 
      } 
     } 
     else 
     { 
      MessageBox.Show("Connection Failed"); 
     } 
    } 
+3

你的数据库文件名真的在它的末尾有空格吗? '期末考试.accdb' – LarsTech

+0

是的。我刚刚检查了它的主文件。我似乎无法弄清楚它的问题。整天工作 –

回答

1

有几件事要检查。首先改变渔获到

MessageBox.Show(ex.Message); 

这将是更多的信息!

其次在哪一行错误被抛出?第三,请检查您的连接字符串。当我连接来访问我的字符串是永远的形式为:

@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DBFullPath\DBName.accdb;Jet OLEDB:Engine Type=5;Persist Security Info=False;" 

如果没有密码或

@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DBFullPath\DBName.accdb;Jet OLEDB:Engine Type=5;Jet OLEDB:Database Password = password;" 

,如果有一个。

最后,你真的有电话号码为数字吗?以0开头的数字或带有+的国际数字会发生什么?

编辑

对不起,我想你是误会我了。我想要你做的是修改catch使其全部读取:

catch (OleDbException ex) 
{ 
    MessageBox.Show(ex.Message); 
    conn.Close(); 
} 
+0

我一直在使用我的数据库的连接字符串。我应该改变为我的形式吗? –

+0

@AtifUlIslam如果你知道连接字符串的工作,然后离开它。我刚刚通过清单。你有没有改变MessageBox呢?这将有极大的帮助! –

+0

是的,它改变了从抓到它所说的话,但似乎有一些错误,并且VS一直在暗示catch为解决方案。但主要问题仍然存在。每次我运行应用程序放入我的数据,然后单击保存按钮弹出一个消息框,并说“微软办公室访问引擎” –