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();
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我想缩短它,以便更容易理解.我怎么能重构它?
免责声明:正如Darin所说,我稍微改变了原来的解决方案.布朗博士.
这个代码很大的事实是最不重要的问题.这里有一个更大的SQL注入问题.您应该使用参数化查询来避免这种情况.
所以我首先将数据访问逻辑外部化为一个单独的方法:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
string productId = comboBox1.Text;
string quantity = textBox2.Text;
UpdateMedicineRecordQuantity("medicinerecord", "quantity", productId, quantity);
Run Code Online (Sandbox Code Playgroud)
使用"tableName"和"attributeName"作为SQL的动态部分是没有安全问题的,只要您不让用户为这两个参数提供输入即可.
您可以继续将此方法重用于其他情况.
| 归档时间: |
|
| 查看次数: |
211 次 |
| 最近记录: |