使用MS Access插入语句C#

Bee*_*eep 2 c# ms-access insert

大家好我有一个简单的插入语句,我知道有些东西丢失了,因为当我点击按钮插入不插入的数据.有任何想法吗?

 protected void saveyear_Click(object sender, EventArgs e)
{
    OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\ASPNetDB.mdb;Persist Security Info=True");
    OleDbDataAdapter da = new OleDbDataAdapter();

    da.InsertCommand = new OleDbCommand("INSERT INTO DVD_Infomation (Year) VALUES (@Year)", connection);
    {
        da.InsertCommand.Parameters.AddWithValue("@Year", Year.Text);
    }

    connection.Open();

        da.InsertCommand.ExecuteNonQuery();

    connection.Close();
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 5

YEAR是MS-Access Jet的保留关键字.
如果要将其用作列的名称,则应将其括在方括号中

da.InsertCommand = new OleDbCommand("INSERT INTO DVD_Infomation ([Year]) VALUES (@Year)", connection);
{
    da.InsertCommand.Parameters.AddWithValue("@Year", Year.Text);
}
Run Code Online (Sandbox Code Playgroud)

如果仍然可以,我建议更改该列的名称.每次尝试在语句中使用该列时,都会遇到此错误

作为旁注,我会将上面的代码编写为

using(OleDbConnection connection = new OleDbConnection(.....))
using(OleDbCommand cmd = new OleDbCommand("INSERT INTO DVD_Infomation ([Year]) VALUES (@Year)", connection))
{
    cmd.Parameters.AddWithValue("@Year", Year.Text);
    connection.Open();
    cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)

添加using语句围绕创建中的连接和该命令将确保正确的关闭和也异常的情况下,这些对象的处置,并保持你的程序的详细资源使用友好