如何在数据库中搜索数据并将其添加到C#中的文本框中?

时间:2013-08-24 06:33:18

标签: c# sql database

我在database中有多个数据,因此我需要在不同的textBoxes中添加。 这是我的代码

private void Search_button1_Click(object sender, EventArgs e)
{
    string query = string.Empty;
    if (ID_textBox1.Text.Trim().Length > 0)
    {
        try
        {
            query = "SELECT ProductName,ProductDescription,SellPrice FROM Table2 WHERE ProductID='" + ID_textBox1.Text + "'";
            SqlConnection Conn = CreateConnection.create_connection();
            SqlCommand cd = new SqlCommand(query, Conn);
            SqlDataReader reader = cd.ExecuteReader();

            while (reader.Read())
            {
                Name_textBox2.Text = reader["ProductName"].ToString();
                Description_textBox3.Text = reader["ProductDescription"].ToString();
                Unit_Price_textBox5.Text = reader["SellPrice"].ToString();
            }
            reader.Close();
            Name_textBox2.Text = Name_textBox2.Text;
            Description_textBox3.Text = Description_textBox3.Text;
            QTY_textBox4.Text = 1.ToString();
            Unit_Price_textBox5.Text = Unit_Price_textBox5.Text;
            Price_textBox6.Text = (decimal.Parse(QTY_textBox4.Text) * decimal.Parse(Unit_Price_textBox5.Text)).ToString();

        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

你没有说明你的问题是什么,但我建议做一些事情。

  1. 使用参数化查询。这样可以防止SQL注入攻击。

  2. 使用using语句确保处理妥当。

  3. 这样的行:Name_textBox2.Text = Name_textBox2.Text;是不必要的 - 您只需将值分配回自身。

  4. 1.ToString()没有任何意义。 1不是有效的变量名称。如果您想将值1分配给文本框,只需使用QTY_textBox4.Text = "1";

  5. 我会将您的代码重写为:

    if (ID_textBox1.Text.Trim().Length > 0)
    {
        try
        {
            query = "SELECT ProductName,ProductDescription,SellPrice FROM Table2 WHERE ProductID=@ProductID";
    
            using (SqlConnection Conn = CreateConnection.create_connection())
            {
    
                // NOTE: If CreateConnection.create_connection() does not return
                // an opened connection, you will need to open it like this:
                // Conn.Open();
                SqlCommand cd = new SqlCommand(query, Conn);
                cd.Parameters.AddWithValue("@ProductID", ID_textBox1.Text);
    
                using (SqlDataReader reader = cd.ExecuteReader())
                {
    
                    while (reader.Read())
                    {
                        Name_textBox2.Text = reader["ProductName"].ToString();
                        Description_textBox3.Text = reader["ProductDescription"].ToString();
                        Unit_Price_textBox5.Text = reader["SellPrice"].ToString();
                    }
                }
            }
    
            decimal quantity;
            decimal unitPrice;
    
            QTY_textBox4.Text = "1";
    
            decimal.TryParse(QTY_textBox4.Text, out quantity);
            decimal.TryParse(Unit_Price_textBox5.Text, unitPrice);
            Price_textBox6.Text = (quantity * unitPrice).ToString();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    以上代码使用参数化查询 - "SELECT ProductName,ProductDescription,SellPrice FROM Table2 WHERE ProductID=@ProductID"@ProductID是参数的占位符。

    该参数由cd.Parameters.AddWithValue("@ProductID", ID_textBox1.Text);行填充。

    using语句用于SqlConnectionSqlDataReader,并确保正确关闭和处理对象,即使发生异常也是如此。

    我删除了TextBox在其中分配了当前值的不必要行,就像在上面的循环中完成的那样。

    最后,我建议使用TryParse,因为如果解析不成功,则不会抛出错误。实际上,如果解析不成功,您可以使用TryParse来显示消息(TryParse返回布尔值)。

    基于查询,我猜你只想要一行数据,但是如果你得到多行数据,那么最后一行将是TextBox中的最终值。

    如果没有更多信息,我们可以告诉您更多信息。我希望它有所帮助。