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