从另一个函数执行查询
问题描述:
我想对按钮单击事件执行查询。从另一个函数执行查询
但是,该查询是写在另一个函数。
这是我的代码,它不工作。我的问题是什么?
namespace MCE_Member_Registration
{
public partial class registration_form_view : System.Web.UI.Page
{
SqlConnection conn = new SqlConnection("ConnectionString");
SqlCommand cmd;
protected void Page_Load(object sender, EventArgs e)
{
createform();
}
protected void createform() {
NameValueCollection nvc = Request.Form;
surname.Text = nvc["txt_surname"];
cmd.CommandText = "Insert into mce_applicants_information values(N'" + nvc["txt_surname"] + "')";
}
protected void confirm_Click(object sender, EventArgs e)
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
}
答
我不确定这是否解决了您的问题。但如果你真的需要另一种方法来创建你的命令,让它返回它。
protected SqlCommand GetCommand()
{
SqlCommand cmd = new SqlCommand("Insert into blahblah values(blahblah)", connection);
return cmd;
}
protected void Button1_Click() {
connection.Open();
GetCommand().ExecuteNonQuery();
connection.Close();
}
请注意,由于多种原因,这不是最佳做法。即使发生异常,连接也应该关闭,所以请使用using
语句。但是这种方法会成为问题,因为连接是一个领域。
所以我宁愿它也使用参数TRO防止SQL注入攻击的所有功能于一身的方法方法:
protected void Button1_Click()
{
ExecuteBlahBlahCommand("blahblah");
}
private void ExecuteBlahBlahCommand(string blaColumnVal)
{
const string sql = "Insert into blahblah values(@blaColumn)";
using (var con = new SqlConnection(connectionString))
using (var cmd = new SqlCommand(sql, con))
{
cmd.Parameters.AddWithValue("@blaColumn", blaColumnVal);
con.Open();
cmd.ExecuteNonQuery();
}
}
答
回答这个问题本身 - 你在函数内声明的任何变量不能被外面看到该功能。需要声明的正确scope的SqlCommand
...
例如:
SqlCommand cmd;
protected void CreateQuery()
{
cmd = new SqlCommand("Insert into blahblah values(blahblah),connection)";
}
protected void Button1_Click()
{
CreateQuery();
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
}
这将在声明类级别的变量,并于该类所有其他方法访问。
我只想提一提@Tim Schmelter的答案是一个很好的解决方案,可以更好地满足您的需求。
+0
是的,我试过了,但仍然是空的查询执行。 – user2163530 2013-03-14 10:09:19
答
我建议你使用CommandText property
而不是构造器,因为CMD的实例此代码之前创建的,所以你调整你的财产
protected void CreateQuery() {
cmd.CommandText = "Insert into blahblah values(blahblah)";
}
protected void Button1_Click() {
connection.Open();
CreateQuery();
cmd.ExecuteNonQuery();
connection.Close();
}
此查询执行空。我认为这是因为SqlCommand cmd的东西是在另一个功能... – user2163530 2013-03-14 09:37:53
这是一个糟糕的设计,因为你正在设置一个对象在课堂上。 – 2013-03-14 09:38:17