asp.net 用parameter对象更新数据

ASP.NET中更新数据库数据时,使用参数化数据命令可以提高代码的安全性。本文介绍了如何使用Parameter对象来避免SQL注入风险,详细阐述了使用`AddWithValue`和`Add`方法的区别,以及在处理DateTime类型时的注意事项。建议在高效率要求场景下使用`Add`方法,以确保数据类型的准确匹配。
摘要由CSDN通过智能技术生成

部分摘自asp.net3.5从入门到精通c#2008

  asp.net要执行删除和更新操作实际并不复杂,只要使用一个数据命令(Command)对象,使用Update, Insert 或者Delete 这三个语句之一。在执行删除、更新或插入操作时,并不需要获取获取数据,因此也并不需要使用DataReader对象。

  要执行Updata、Insert或者 Delete语句,只需要创建一个数据命令(Command)对象,然后调用其ExecuteNonQuery()方法来执行数据命令。ExecuteNonQuery()方法将返回受影响的记录数,可以通过检查该方法的返回值,以判断对数据库的操作是否执行成功。例如,如果试图执行一个更新或者删除操作,但是ExecuteNonQuery()方法的返回值为0,则表示操作失败,这个能使由于数据库中并不存在于Where子句中的筛选条件相匹配的记录。(另外,如果该SQL命令具有语法错误,或者该SQL命令试图检索一个数据库中并不存在的表时,将会产生异常。)

 

这里只说一下更新的方法,先是不安全的代码:

 

代码
   
   
   
string insertSQL;
insertSQL = " INSERT INTO Authors ( " ;
insertSQL += " au_id, au_fname, au_lname, " ;
insertSQL += " phone, adress, sity, state, zip, contract) " ;
insertSQL += " VALUES (' " ;
insertSQL += txtID.Text + " ', ' " ;
insertSQL += txtFirstName.Text + " ', ' " ;
insertSQL += ...
...
...
insertSQL += txtZip.Text + " ') " ;

SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(insertSQL, con);

// 尝试打开数据库连接并执行更新。
int added = 0 ;
try
{
  con.Open();
  added = cmd.ExecteNonQuery();
  lblStatus.Text = added.ToString() + " records inserted. " ;
}
catch (Exception err)
{
  lblStatus.Text = " Error inserting record. " ;
  lblStatus.Text += err.Message;
}
finally
{
  con.Close();
}

// added判断操作是否成功

 

  这个例子是把字符串在代码中连接起来组成一个SQL字符串,然后再通过command执行这个动态生成的SQL语句。这个办法虽然简单但是存在很大的缺陷,如果用户无意或有意的输入一些特殊字符如单引号(')或者注入一些恶意代码,后果就严重了。

  为了创建更加稳定的数据命令,可以使用ado.net的参数化数据命令(parameterized command)。在参数化数据命令中,使用参数作为占位符来替代硬编码的值。下面是更改后的代码(更改的地方用下划线):

 

代码
   
   
   
string insertSQL;
insertSQL = " INSERT INTO Authors ( " ;
insertSQL += " au_id, au_fname, au_lname, " ;
insertSQL += " phone, adress, sity, state, zip, contract) " ; "
insertSQL += " VALUES (' " ;
insertSQL += "@au_id, @au_fname, @au_lname, ";
insertSQL += "@phone, @address, @city, @state, @zip, @contract)" ;

SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(insertSQL, con);

cmd.Parameters.AddWithValue( "@au_id", txtID.Text);
cmd.Parameters.AddWithValue("@au_fname", txtFirstName.Text);
cmd.Parameters.AddWithValue("@au_lname", txtLastName.Text);
cmd.Parameters.AddWithValue("@phone", txtPhone.Text);
...
...
...
cmd.Parameters.AddWithValue("@zip" , txtZip.Text);

// 尝试打开数据库连接并执行更新。
int added = 0 ;
try
{
  con.Open();
  added = cmd.ExecteNonQuery();
  lblStatus.Text = added.ToString() + " records inserted. " ;
}
catch (Exception err)
{
  lblStatus.Text = " Error inserting record. " ;
  lblStatus.Text += err.Message;
}
finally
{
  con.Close();
}

// added判断操作是否成功

 

 

 

对于不同的数据提供程序,参数化数据命令的语法是不同的。对于S

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值