我在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);
}
}
}
答案 0 :(得分:1)
你没有说明你的问题是什么,但我建议做一些事情。
使用参数化查询。这样可以防止SQL注入攻击。
使用using
语句确保处理妥当。
这样的行:Name_textBox2.Text = Name_textBox2.Text;
是不必要的 - 您只需将值分配回自身。
1.ToString()
没有任何意义。 1
不是有效的变量名称。如果您想将值1分配给文本框,只需使用QTY_textBox4.Text = "1";
。
我会将您的代码重写为:
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
语句用于SqlConnection
和SqlDataReader
,并确保正确关闭和处理对象,即使发生异常也是如此。
我删除了TextBox在其中分配了当前值的不必要行,就像在上面的循环中完成的那样。
最后,我建议使用TryParse
,因为如果解析不成功,则不会抛出错误。实际上,如果解析不成功,您可以使用TryParse
来显示消息(TryParse
返回布尔值)。
基于查询,我猜你只想要一行数据,但是如果你得到多行数据,那么最后一行将是TextBox中的最终值。
如果没有更多信息,我们可以告诉您更多信息。我希望它有所帮助。