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 に答える