用 C# 中的 access 数据库中的增量值填充文本框
Posted
技术标签:
【中文标题】用 C# 中的 access 数据库中的增量值填充文本框【英文标题】:Fill textbox with an incremented value from access database in C# 【发布时间】:2019-02-12 16:44:49 【问题描述】:我创建了一个 C# 应用程序来查询和插入产品数据库。但是,我在这里有一个小小的疑问,如果有人可以帮助我,我马上感谢你。
以下是:
我有一个表格,可以将数据插入在 MS Access 2007 中创建的数据库中,其中包含参考值、销售编号、客户代码、客户名称、数量和存档中的位置编号;这是我的代码直到那一刻:
private void btn_save_Click(object sender, EventArgs e)
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=product.accdb");
OleDbCommand check_sn = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([sn] = @sn)", con);
OleDbCommand check_reference = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([reference] = @ref)", con);
OleDbCommand check_number = new OleDbCommand("SELECT COUNT(*) FROM [product] WHERE ([number] = @num)", con);
con.Open();
check_reference.Parameters.AddWithValue("@ref", textBox_ref.Text);
check_sn.Parameters.AddWithValue("@sn", textBox_sn.Text);
check_number.Parameters.AddWithValue("@num", textBox_num.Text);
int refExist = (int)check_reference.ExecuteScalar();
int SNExist = (int)check_sn.ExecuteScalar();
int numExist = (int)check_number.ExecuteScalar();
if (refExist > 0)
MessageBox.Show("A product with this reference already exists....!");
else if (SNExist> 0)
MessageBox.Show("A product with this sale number already exists....!");
else if (numExist > 0)
MessageBox.Show("A product with this archive number already exists....!");
else
try
String reference = textBox_ref.Text.ToString();
String sn = textBox_ov.Text.ToString();
String cod_client = textBox_cod.Text.ToString();
String client = textBox_cliente.Text.ToString();
String qtd = textBox_qtd.Text.ToString();
String number = textBox_num.Text.ToString(); //This will be the incremented number
String my_query = "INSERT INTO product(reference,sn,cod_client,client,qtd,number)VALUES('" + reference + "','" + sn + "','" + cod_client + "','" + client + "','" + qtd + "','" + number + "')";
OleDbCommand cmd = new OleDbCommand(my_query, con);
cmd.ExecuteNonQuery();
MessageBox.Show("Data saved successfully...!");
catch (Exception ex)
MessageBox.Show("Failed due to" + ex.Message);
finally
con.Close();
cleanTextBoxes(this.Controls);
private void search_btn_Click(object sender, EventArgs e)
Form search = new Form_search();
search.Show();
this.Hide();
我怎样才能做到这一点,而不是在文本框中手动输入存档中的位置编号,它可以自动填充存档中的新位置。例如,我插入的最后一个产品在存档中的位置为 50,新的产品将自动为 51 等等......并且这个数字应该自动出现在文本框中,以便用户知道新注册的号码是多少产品。
谢谢,
【问题讨论】:
使用标量,将返回的 id 读回数据库。您可以在查询中使用它来获取值。 ***.com/questions/42648/… 格雷格你能说得更具体一点吗?可以告诉我...谢谢 请需要帮助来完成这个应用我已经尝试了一个 select top1 desc 到 number collumn 但是我如何将这个 valeu 返回到文本框中? SQL Injection alert - 您应该不将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables 【参考方案1】:好的,我已经尝试过了,但我现在如何将这个值增加 +1?
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Aneis_Calibre.accdb");
con.Open();
OleDbDataReader myReader = null;
OleDbCommand number = new OleDbCommand("SELECT TOP 1 [number] FROM product Order by [number] desc", con);
myReader = number.ExecuteReader();
while (myReader.Read())
textBox_num.Text = (myReader["number"].ToString());
con.Close();
【讨论】:
【参考方案2】:在您的查询中,您可能希望按照这些思路做一些事情。
INSERT ...
OUTPUT inserted.identity_column
VALUES (...)
这将返回一个带有 id 值的行。 SQL 中的标识列将始终为您自动递增。这将减轻您获取最后一条记录并执行以下操作的方法:
int.TryParse(reader["..."]?.ToString(), out int id);
textbox.Text = id++;
通过使用标量或读取器,但我建议使用标量,如果您返回带有修改后的 SQL 查询的单个列,将导致准确的新插入 id。
【讨论】:
以上是关于用 C# 中的 access 数据库中的增量值填充文本框的主要内容,如果未能解决你的问题,请参考以下文章