使用 C# 在 MS Access 数据库中自动增加 ID

Posted

技术标签:

【中文标题】使用 C# 在 MS Access 数据库中自动增加 ID【英文标题】:Auto Increasing ID in MS Access Database using C# 【发布时间】:2019-12-30 12:31:02 【问题描述】:
protected void Button1_Click(object sender, EventArgs e)
    
        OleDbConnection con = new OleDbConnection();
        con.ConnectionString =
         "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=d:\\NewProject\\MainData.accdb;Persist Security Info=false";
        string query1 = "select BlogId from BlogTable where UserName=@username";
        OleDbCommand cmd1 = new OleDbCommand(query1, con);
        cmd1.Parameters.AddWithValue("@username", TextBox1.Text);
        con.Open();
        int id =(int)cmd1.ExecuteScalar()+1;
      string query2="insert into BlogTable values(id,@1,@2,@3)";        
        OleDbCommand cmd = new OleDbCommand(query2, con);
        cmd.Parameters.AddWithValue("@1", TextBox1.Text);
        if(RadioButton1.Checked)
            cmd.Parameters.AddWithValue("@2", RadioButton1.Text);
        if (RadioButton2.Checked)
            cmd.Parameters.AddWithValue("@2", RadioButton2.Text);
        if (RadioButton2.Checked)
            cmd.Parameters.AddWithValue("@2", RadioButton3.Text);
        if (RadioButton2.Checked)
            cmd.Parameters.AddWithValue("@2", RadioButton4.Text);
        if (RadioButton2.Checked)
            cmd.Parameters.AddWithValue("@2", RadioButton5.Text);
        if (RadioButton2.Checked)
            cmd.Parameters.AddWithValue("@2", RadioButton6.Text);
        cmd.Parameters.AddWithValue("@3", TextArea1.Text);

        int i = cmd.ExecuteNonQuery();
        if (i >= 1)
            Label1.Text = "Record Saved";
        else
            Label1.Text = "Record not Saved";

        con.Close();
    

在我的 MS Access 数据库中,我将 id 类型设置为自动编号,尽管它仍然不会自动增加。我该怎么办?

使用上面的代码,它返回一个参数没有值的错误。

我的桌子是这样的:

BlogId: 自动编号 Username:文字 Category:文字 Blog:文字

【问题讨论】:

您是否收到错误消息?或者它现在插入了什么? 如果是自动编号,则不应插入 id 它没有插入任何东西,并显示参数之一没有值的错误 你说得对,我已经试过了,但没用 这也可能意味着另一个值是空的,它与 AI id 无关 【参考方案1】:

您应该在insert 语句中省略自动编号字段,而只插入其他字段的值,例如:

string query2="insert into BlogTable (Field1, Field2, Field3) values(@1,@2,@3)"; 

Field1Field2Field3更改为要使用参数@1@2@3保存的值填充的字段的名称。

你这里似乎也有很多错别字:

if (RadioButton1.Checked)
    cmd.Parameters.AddWithValue("@2", RadioButton1.Text);
if (RadioButton2.Checked)
    cmd.Parameters.AddWithValue("@2", RadioButton2.Text);
if (RadioButton2.Checked) // <---------------------------- Should this be RadioButton3?
    cmd.Parameters.AddWithValue("@2", RadioButton3.Text);
if (RadioButton2.Checked) // <---------------------------- Should this be RadioButton4?
    cmd.Parameters.AddWithValue("@2", RadioButton4.Text);
if (RadioButton2.Checked) // <---------------------------- Should this be RadioButton5?
    cmd.Parameters.AddWithValue("@2", RadioButton5.Text);
if (RadioButton2.Checked) // <---------------------------- Should this be RadioButton6?
    cmd.Parameters.AddWithValue("@2", RadioButton6.Text);

【讨论】:

【参考方案2】:

更改这行代码:

string query2="insert into BlogTable values(id,@1,@2,@3)";

对此:

string query2="insert into BlogTable values(@1,@2,@3)";

您的数据库查询不起作用的原因是您指定要通过执行以下操作插入 id:values(id, .....) 但是您没有为其添加值 - 这会导致它发送一个空值.当您想对 id 列使用自动增量(AI)时,数据库希望您自己不提供值,在您的情况下为 null。

【讨论】:

它不会自动增加 那你的数据库设置有问题,从你发的内容我看不出来 没有。如果您不指定要插入的列,则不能省略列。 嗯,有问题,你不能只排除设置的整个部分 - 因为你认为它不可能是错误的 我在表中插入了一条记录,将 1 放在 id 的位置,它是成功的,但我认为从值中删除 1 后它会自动开始增加 id,id 没有。跨度>

以上是关于使用 C# 在 MS Access 数据库中自动增加 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何检索 MS-Access 中的最后一个自动增量值,例如 Sql Server 中的 @@Identity

如何从 C# 调用 MS Access 数据库宏

无法通过 C# oledb 将记录插入 MS Access

在 C# 中使用 MS Access 查找字段

在 C# 中更新 MS Access 表

使用 c# 和 oledb 查询更新 Ms-Access 2010 中的列值