C# 自动增量列(DataGridView,Microsoft Access)

C# 自动增量列(DataGridView,Microsoft Access),c#,sql,database,winforms,ms-access,C#,Sql,Database,Winforms,Ms Access,我有一个表Employee,在Access数据库中有一堆列。我已经手动添加了几行,我的ID列被定义为自动递增(计数器) 我试图使用表单向表中添加一行,当然除了ID列之外,其他字段(textBox)都相同。问题是,如果我在表单中添加行,除了ID列之外,其他一切都可以正常工作。在DataGridView中显示-1,在数据库中显示正确的自动递增ID 问题是:如何匹配这些ID?我希望这个解释是可以理解的 这是我的addtodb按钮的代码 private void Button1_Click(object

我有一个表
Employee
,在Access数据库中有一堆列。我已经手动添加了几行,我的ID列被定义为自动递增(计数器)

我试图使用表单向表中添加一行,当然除了ID列之外,其他字段(textBox)都相同。问题是,如果我在表单中添加行,除了ID列之外,其他一切都可以正常工作。在DataGridView中显示
-1
,在数据库中显示正确的自动递增ID

问题是:如何匹配这些ID?我希望这个解释是可以理解的

这是我的addtodb按钮的代码

private void Button1_Click(object sender, EventArgs e)
{
        Form3 main = this.Owner as Form3;

        if (main != null)
        {
            DataRow nRow = main.bestEmployeeDataSet.Tables[0].NewRow();
            
            nRow[1] = full_name.Text;
            nRow[2] = position.Text;
            nRow[3] = age.Text;
            nRow[4] = experience.Text;
            nRow[5] = projects.Text;
            nRow[6] = trainee.Text;
            nRow[7] = hours.Text;
            nRow[8] = late.Text;
            nRow[9] = overall_num.Text;

            main.bestEmployeeDataSet.Tables[0].Rows.Add(nRow);
            main.employeeTableAdapter.Update(main.bestEmployeeDataSet.Employee);
            main.bestEmployeeDataSet.Tables[0].AcceptChanges();

            main.dataGridView1.Refresh();

            full_name.Text = "";
            position.Text = "";
            age.Text = "";
            experience.Text = "";
            projects.Text = "";
            trainee.Text = "";
            hours.Text = "";
            late.Text = "";
            overall_num.Text = "";
        }
    }

int rc = main.dataGridView1.RowCount + 1;

nRow[0] = rc;

我试图这样做,但它只会根据我在DataGridView中的条目自动增加Id(我有3个条目,所以我得到Id=4)。在数据库中,下一个Id应该是14,因为我已经通过测试删除按钮删除了一些条目。

“…它只会根据我在DataGridView中的条目自动增加Id(我有3个条目,所以我得到ID=4)在DB中,下一个ID应该是14……当用户在网格中创建一个“新”行时,很明显,您需要从DB而不是网格中获得新ID。Your
bestEmployeeDataSet.Tables[0]
必须包含自动增量ID字段。手动添加新行时:
bestEmployeeDataSet.Tables[0].Rows.add(新对象[]{null,全名.Text,位置.Text,…});
null
标识ID列,该列根据填充数据表时加载的数据表架构自动递增。检查ID列的属性并验证
AutoIncrement
AutoIncrementStep
属性的值。
AllowDBNull
必须是
false
。确定否,它没有如果使用null手动添加raw(我得到相同的id-1,-2,-3等),则sn不起作用,我非常确定这是不对的:DataColumn d=新DataColumn(“id”);d.AllowDBNull=false;另外,我不知道如何从数据库中获取新ID,这是我第一次使用数据库。您不必添加新列,也不必稍后从数据库中获取ID。您必须使用包含ID字段(来自数据库)的查询填充数据表。执行此操作时,DataTable对象的相应列将在表架构中包括自动递增ID字段的详细信息。如果您在Access数据库中实际定义了自动递增ID字段(而不仅仅是名为
ID
)的字段,则会出现这种情况。请记住调用
AcceptChanges()
在填充完数据表之后(无论使用何种方法填充)。请注意,在以前发布的代码段a中,要添加新行:(
bestEmployeeDataSet.Tables[0].Rows.add(新对象[]{null,…)
),ID字段是DataTable定义中的第一个字段。此外,必须遵守所有字段的数据类型。例如,如果
position.Text
用于设置
整型
字段的值,则必须将该值转换为
整型
。或其他值。