使用 C#,如何使用循环在 MS Access 数据库中插入递增数字?

With C#, how to insert incrementing numbers in MS Access database using a loop?

我正在尝试使用 Visual Studio 2012 创建一个 windows 表单,并使用 MS Access 数据库。此表单将以编程方式创建一个数据库,并根据用户输入将所有数据手动输入到字段中。 我可以很好地创建数据库和表,主键也自动递增。我想要完成的是我想输入一个开始和结束数字,例如一年,然后遍历数字范围以输入冗余数据和递增的年份,这将节省大量的输入。 我有循环工作,数据通过循环的长度输入到每条记录中,但我需要增加的数字不会增加。 当已经有一个自动递增的主键时,如何让第二个字段根据用户输入递增?任何见解将不胜感激,我的问题方法如下。

    private void button3_Click(object sender, EventArgs e)
    {
        char ch = '"';
        string sql = "";
        string tempYear = "";
        int year = Convert.ToInt32(this.textBoxBegYear.Text);
        int endYear = Convert.ToInt32(this.textBoxEndYear.Text);

        try
        {
            OleDbConnection myConnection = new OleDbConnection();
            myConnection.ConnectionString
                   "Provider=Microsoft.ACE.OLEDB.12.0DataSource=" + ch + openFileDialog1.FileName + ch;
            myConnection.Open();

            sql = "INSERT INTO " + this.comboBox1.SelectedItem.ToString() + " (Year) Values (@tempYear)";
            OleDbCommand myCommand = new OleDbCommand(sql, myConnection);

            for (int i = year; i <= endYear; i++)
            {
                tempYear = Convert.ToString(i);
                myCommand.Parameters.Add("@tempYear", OleDbType.Numeric).Value = tempYear;
                myCommand.ExecuteNonQuery();
            }
            myCommand.Connection.Close();
        }
        catch (Exception err)
        {
            MessageBox.Show("Error: " + err.Message.ToString());
        }
    }

我希望完成的输出如下,但我需要先让数字递增,其余的工作正常...

     Year    ...all other fields
     2000    ...stuff
     2001    ...identical stuff from previous record
     2002    ...identical stuff from first record

谢谢。

System.Data.OleDb 忽略参数 names,因此即使您 .Add 在循环中使用相同名称的参数,您实际上是在创建一个新的附加参数每一次。您添加的每个新参数都有新的(增加的)值,但这些新参数永远不会被使用;只有第一个(具有第一个值)有任何效果。

你需要做的是.Add进入循环前的参数,然后只更新循环里面的.Value

sql = "INSERT INTO " + this.comboBox1.SelectedItem.ToString() + " ([Year]) VALUES (?)";
OleDbCommand myCommand = new OleDbCommand(sql, myConnection);
myCommand.Parameters.Add("?", OleDbType.Integer);
for (int i = year; i <= endYear; i++)
{
    myCommand.Parameters[0].Value = i;
    myCommand.ExecuteNonQuery();
}