1

我正在创建一个数据库应用程序;带有 MS Access 数据库文件。发生的事情是正确插入所有内容,但不是电话号码。输入电话号码时,我正在工作的应用程序会引发异常。

我已经仔细检查了我的编码和我的数据库,但无法弄清楚为什么会导致这个问题。这是代码的一部分。

    private void btn_Save_Click(object sender, EventArgs e)
    {
        {
            try
            {
                OleDbCommand DBcmd = new OleDbCommand();
                DBcmd.CommandType = CommandType.Text;
                DBcmd.CommandText = "INSERT INTO tbl_ClientInfo (FirstName, LastName, Address, ZipCode, City, State, Country, Language, PhoneNr, MobileNr)" + "VALUES (@FirstName, @LastName, @Address, @ZipCode, @City, @State, @Country, @Language, @PhoneNr, @MobileNr)";
                DBcmd.Parameters.AddWithValue("@FirstName", txt_FirstName.Text);
                DBcmd.Parameters.AddWithValue("@LastName", txt_LastName.Text);
                DBcmd.Parameters.AddWithValue("@Address", txt_Address.Text);
                DBcmd.Parameters.AddWithValue("@ZipCode", txt_ZipCode.Text);
                DBcmd.Parameters.AddWithValue("@City", txt_City.Text);
                DBcmd.Parameters.AddWithValue("@State", txt_State.Text);
                DBcmd.Parameters.AddWithValue("@Country", ComboBox_Countries.SelectedItem);
                DBcmd.Parameters.AddWithValue("@Language", comboBox_Languages.SelectedItem);
                DBcmd.Parameters.AddWithValue("@PhoneNr", txt_PhoneNr.Text);
                DBcmd.Parameters.AddWithValue("@MobileNr", txt_MobileNr.Text);


                DBcmd.Connection = DBconnection;
                DBconnection.Open();

                DBcmd.ExecuteNonQuery();

                DBconnection.Close();

            catch (Exception ex)
            {
                System.IO.StreamWriter file = new System.IO.StreamWriter(@"d:\test.txt");
                file.WriteLine(ex);

                file.Close();
            }
        }
    }

提前致谢

4

2 回答 2

2

LANGUAGE 是 MS-Access Jet 中的保留关键字。您需要将其封装在方括号中

DBcmd.CommandText = "INSERT INTO tbl_ClientInfo (FirstName, LastName, Address, ZipCode, " + 
                    "City, State, Country, [Language], PhoneNr, MobileNr)" + 
                    "VALUES (@FirstName, @LastName, @Address, @ZipCode, " + 
                    "@City, @State, @Country, @Language, @PhoneNr, @MobileNr)";

如果仍然可能,我建议更改该列名。每次使用此表时,您总会发现自己陷入这种困境。

于 2013-10-06T14:07:40.493 回答
0

您删除了您得到的异常,即:

System.InvalidOperationException: The connection was not closed. The connection's current state is open

DBconnection 是此方法之外的变量,对吗?异常意味着您已经在其他地方打开了此连接并且尚未关闭它,因此您无法再次打开它。您应该确保在每个使用连接的地方都正确关闭和处理连接,或者检查您发布的代码中的连接状态,如果它已经打开,请不要尝试重新打开它。

于 2013-10-06T14:16:21.710 回答