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

Posted

技术标签:

【中文标题】使用 C#,如何使用循环在 MS Access 数据库中插入递增数字?【英文标题】:With C#, how to insert incrementing numbers in MS Access database using a loop? 【发布时间】:2015-04-04 18:56:37 【问题描述】:

我正在尝试使用 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

谢谢。

【问题讨论】:

这个数字是否必须与任何特别的事物相关? 不,只是我想随着每条记录增加一个数字。用户输入开始和结束的数字,中间的所有内容都填入数据以及递增的数字。在示例中,用户将输入 2000 和 2002。 【参考方案1】:

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();

【讨论】:

在调试时,我可以看到增加的值但找不到将其放入该字段的方法,这也很有意义。

以上是关于使用 C#,如何使用循环在 MS Access 数据库中插入递增数字?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中使用 OleDB 列出 MS Access 文件中的所有查询?

如何使用 MS Access 在 C# 中的两个日期之间进行搜索

如何使用 C# 在 MS-Access 中的查询中使用带有通配符的 LIKE 运算符

如何使用 C# 查询远程 MS ACCESS .mdb 数据库

如何将日期从 C# 存储到 MS-Access 以及如何检索它?

如何使用c#从两个以上的MS Access数据库表中检索数据