Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#,如何使用循环在MS Access数据库中插入递增的数字?_C#_Loops_Ms Access_Increment_Numeric - Fatal编程技术网

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

使用C#,如何使用循环在MS Access数据库中插入递增的数字?,c#,loops,ms-access,increment,numeric,C#,Loops,Ms Access,Increment,Numeric,我正在尝试使用Visual Studio 2012创建windows窗体,并使用MS Access数据库。此表单将以编程方式创建数据库,并根据用户输入将所有数据手动输入到字段中。 我可以很好地创建数据库和表,主键也可以自动递增。我想做的是输入一个开始和结束的数字,比如说一年,然后在数字范围内循环输入冗余数据和递增的年份,这样可以节省大量的输入。 我让循环工作,并且通过循环的长度将数据输入到每个记录中,但是我需要增加的数字不会增加。 当已经有自动递增主键时,如何根据用户输入获取第二个要递增的字段?

我正在尝试使用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());
        }
    }

谢谢。

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

您需要做的是
。在进入循环之前添加
参数,然后只需更新循环内的
。值

sql=“插入“+this.comboBox1.SelectedItem.ToString()+”([Year])值(?);
OleDbCommand myCommand=新的OleDbCommand(sql,myConnection);
myCommand.Parameters.Add(“?”,OleDbType.Integer);

对于(int i=年份;i数字是否必须与任何特定的数字相关?不,只是一个我希望随着每个记录而增加的数字。用户输入开始和结束的数字,中间的所有数字都与递增的数字一起填入数据。在这个示例中,用户将在2000年和2002年输入。这也很有意义调试时,我可以看到递增的值,但找不到将其放入字段的方法。
     Year    ...all other fields
     2000    ...stuff
     2001    ...identical stuff from previous record
     2002    ...identical stuff from first record