gpt4 book ai didi

c# - 我该如何重构这个方法?

转载 作者:太空狗 更新时间:2023-10-30 00:06:03 24 4
gpt4 key购买 nike

private void Update_Record_Click(object sender, EventArgs e)  
{
ConnectionClass.OpenConnection();

if (textBox4.Text == "" && textBox2.Text == "")
{
MessageBox.Show("No value entred for update.");
}
else if (textBox4.Text != "" && textBox2.Text != "")
{
SqlCommand cmd = new SqlCommand("update medicinerecord set quantity='" + textBox2.Text + "' where productid='"+comboBox1.Text+"'", ConnectionClass.OpenConnection());
cmd.ExecuteNonQuery();

cmd = new SqlCommand("update myrecord set price='" + textBox4.Text + "' where productid='" + comboBox1.Text + "'", ConnectionClass.OpenConnection());
cmd.ExecuteNonQuery();
ConnectionClass.CloseConnection();
}
else if (textBox2.Text != "")
{
SqlCommand cmd = new SqlCommand("update myrecord set quantity='" + textBox2.Text + "' where productid='" + comboBox1.Text + "'", ConnectionClass.OpenConnection());
cmd.ExecuteNonQuery();
ConnectionClass.CloseConnection();
}
else if (textBox4.Text != "")
{
SqlCommand cmd = new SqlCommand("update myrecord set price='" + textBox4.Text + "' where productid='" + comboBox1.Text + "'", ConnectionClass.OpenConnection());
cmd.ExecuteNonQuery();
ConnectionClass.CloseConnection();
}
}

它工作正常,但我想缩短它以便更容易理解。我该如何重构它?

最佳答案

免责声明:按照 Darin 的建议,我稍微更改了他的原始解决方案。布朗医生。

事实上,这段代码很大是最不重要的问题。 SQL注入(inject)在这里有一个更大的问题。您应该使用参数化查询来避免这种情况。

所以我将从将数据访问逻辑外部化到一个单独的方法开始:

public void UpdateMedicineRecordQuantity(string tableName, string attributeName, string productId, string attributeValue)
{
using (var conn = new SqlConnection("YOUR ConnectionString HERE"))
using (var cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "UPDATE " + tableName + "SET " + attributeName+ " = @attributeValue where productid = @productid";
cmd.Parameters.AddWithValue("@attributeValue", attributeValue);
cmd.Parameters.AddWithValue("@productid", productId);
cmd.ExecuteNonQuery();
}
}

然后:

string productId = comboBox1.Text;
string quantity = textBox2.Text;
UpdateMedicineRecordQuantity("medicinerecord", "quantity", productId, quantity);

只要您不让用户为这两个参数提供输入,使用“tableName”和“attributeName”作为 SQL 的动态部分就没有安全问题。

您可以继续在其他情况下重复使用此方法。

关于c# - 我该如何重构这个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com