使用 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)";
将Field1
、Field2
和Field3
更改为要使用参数@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的主要内容,如果未能解决你的问题,请参考以下文章