更改文本框名称C#的功能

时间:2014-05-28 21:25:26

标签: c# winforms

我正在构建的当前程序用于保存发票,我想将数据保存到数据库中。但是,对于每个可能的条目,我不想重复下面显示的代码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();
            }
        }

1 个答案:

答案 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());
            }
        }
    }
}