Microsoft Access Engine

时间:2017-07-25 16:08:54

标签: c# visual-studio ms-access

我尝试将数据从Visual Studio添加到C#中的Access。每次单击按钮保存数据时,都会弹出一条错误消息,说明" Microsoft数据库引擎"。我不知道问题出在哪里。我粘贴了下面的代码:

    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");
        }
    }

1 个答案:

答案 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 (OleDbException ex)
{
    MessageBox.Show(ex.Message);
    conn.Close();
}