我正在构建的当前程序用于保存发票,我想将数据保存到数据库中。但是,对于每个可能的条目,我不想重复下面显示的代码20次,而是想在函数中创建一个文本框名称发生变化的函数。
所有文本框都以1到20结尾的数字命名。我想知道是否有一种方法可以在最后改变数字,如果它比重复这个更值得做20次。
if (txtProductID1.Text.Length > 0)
{
OleDbConnection oledbconnection1 = new OleDbConnection();
oledbconnection1.ConnectionString = Con;
OleDbCommand cmd;
String strInsert = "";
//Generate SQL Statement
strInsert = "Insert into [InvoiceOrder] Values (";
strInsert += "'1', ";
strInsert += "'" + txtInvoiceNo.Text + "', ";
strInsert += "'" + txtProductDescription1.Text + "', ";
strInsert += "'" + txtOrderNo1.Text + "', ";
strInsert += "'" + cboUnit1.Text + "', ";
strInsert += "'" + txtAmount1.Text + "', ";
strInsert += "'" + txtPrice1.Text + "', ";
strInsert += "'" + txtSum1.Text + "', ";
strInsert += "'" + txtDiscount1.Text + "' ";
strInsert += ")";
try
{
oledbconnection1.Open();
cmd = new OleDbCommand();
cmd.CommandText = strInsert;
cmd.Connection = oledbconnection1;
cmd.ExecuteNonQuery();
//MessageBox.Show("Record saved");
}
catch (Exception ex)
{
MessageBox.Show("Error : " + ex.ToString());
}
finally
{
oledbconnection1.Close();
}
}
答案 0 :(得分:0)
首先,参数化您的查询。除了安全性之外,当你在某个地方忘记单个撇号时,你建立起来的查询会让你失望。
至于迭代控件,也许Controls.Find()
对你有用。以下代码假定所有控件都具有1到20之间的数字,并且每个数字在表单上只出现一次。 (在您的示例中,txtInvoiceNo
没有数字 - 我认为这是一个错字。)
我也进行了一些其他更改,例如将finally
块替换为using
块,这将关闭并为您处置连接。
for (var i = 1; i <= 20; i++)
{
if (!String.IsNullOrEmpty(Controls.Find("txtProductID" + i, true).Single().Text))
{
using (var oledbconnection1 = new OleDbConnection())
{
oledbconnection1.ConnectionString = Con;
oledbconnection1.Open();
var insertStatement =
"Insert into [InvoiceOrder] Values ('1', @InvoiceNo, @ProductDesc, @OrderNo, @Unit, @Amount, @Price, @Sum, @Discount)";
try
{
using (var cmd = new OleDbCommand(insertStatement, oledbconnection1))
{
cmd.Parameters.AddWithValue("@InvoiceNo", Controls.Find("txtInvoiceNo" + i, true).Single().Text);
...
...
cmd.Parameters.AddWithValue("@Discount", Controls.Find("txtDiscount" + i, true).Single().Text);
cmd.ExecuteNonQuery();
//MessageBox.Show("Record saved");
}
}
catch (Exception ex)
{
MessageBox.Show("Error : " + ex.ToString());
}
}
}
}