2013-11-24 35 views
1
using System.Data.SqlClient; 
using System.Data.Sql; 

public partial class _Default : System.Web.UI.Page 
{ 


SqlConnection con = new SqlConnection(@"Data Source=GAGAN-PC\SQLEXPRESS;Initial Catalog=update_test;Integrated Security=True"); 
    SqlCommand cmd; 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void delete_button_Click(object sender, EventArgs e) 
    { 
     con.Open(); 
     cmd = new SqlCommand("delete from update_delete where id like'"+TextBox1.Text+"'",con); 
     cmd.ExecuteNonQuery(); 
     Response.Write("Control reached."); 
     con.Close(); 
     Response.Write("Data successfully deleted."); 
    } 
    protected void update_button_Click(object sender, EventArgs e) 
    { 
     con.Open(); 
     cmd = new SqlCommand("update update_delete set password ='"+TextBox3.Text+"' where id like'"+TextBox2+"'", con); 
     cmd.ExecuteNonQuery(); 
     Response.Write("Control reached."); 
     con.Close(); 
     Response.Write("Data successfully Updated."); 
    } 
} 

我想实现更新查询,但有一点问题。我已经使用SQL Server作为数据库,并且update_delete是一个表格,其中有3列id,sname,password,我试图根据id更新密码。更新查询不起作用在ASP.NET web应用程序

问题是当我点击更新按钮控件时达到cmd.ExecuteNonQuery();没有显示错误。但更新没有发生。我该怎么办。请请请帮助我。提前致谢。 :) :)

+1

这么多'IDisposable'对象。所以很少有'Dispose'调用:( –

+1

所以很多查询,很少的参数 - 非常多的SQL注入**危险! –

+0

错误的,marc_s。你可以使用LIKE OPERATOR和INT等数字数据类型。不清楚为什么有人但它确实按预期运行 – laylarenee

回答

1

我想你会得到一个例外。我会建议赶上你的异常并告诉我们信息...你可以使用调试器或try-catch子句捕捉异常。

如果您没有收到异常并显示“控制已达到”消息,则必须使用已形成的SQL字符串直接在SQL Server中使用它,并查看SQL语句中是否有错误。我想你会以某种方式形成无效的SQL语句(例如使用不存在的ID)。

希望我帮了忙!

2

我只是猜测在这里 - 如果Id是一个数字数据类型,那么你不能使用LIKE它。

另请参见:请使用using()...块以确保正确处理和使用参数化查询以避免SQL注入攻击。

撰写您UPDATE命令是这样的:

protected void update_button_Click(object sender, EventArgs e) 
{ 
    // get the values to use 
    string idValue = Convert.ToInt32(TextBox3.Text.Trim()); 
    string password = TextBox2.Text.Trim(); 

    // define the query text with *parameters* ! 
    string updateQuery = "update update_delete set password = @password where id = @ID"; 

    // put things like SqlConnection and SqlCommand into "using()...." blocks 
    using (SqlCommand updCmd = new SqlCommand(updateQuery, con)) 
    { 
     // define parameters and their values 
     updCmd.Parameters.Add("@password", SqlDbType.VarChar, 50).Value = password; 
     updCmd.Parameters.Add("@ID", SqlDbType.Int).Value = idValue; 

     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 

     Response.Write("Data successfully Updated."); 
    } 
} 
+1

另一个重要的注意事项是密码不应该以纯文本形式存储 – laylarenee

+0

'//定义参数和它们的值'是否有指定类型的意义?我知道一些参数必须(例如TVPs),否则'AddWithValue'对我来说一直很好,它的代码少得多。 –

+0

@ ta.speot.is:这只是个人偏好 - 我p请参阅**告诉** ADO.NET我的类型是什么,而不是让它猜出我提供的值。如果你传入NULL值,应该猜到什么? –