我们原先写的sql语句总是把条件直接拼进去,这样每次的sql都是不同的,但这些sql除了条件部分不同外,其他都是一样的,sqlserver在解析sql语句的时候分了几个步骤:
1 语法分析
2 生成一个执行计划
执行计划就是执行的路径,完成一个任务可以有好多条路径的,sqlserver会通过复杂的分析,来取的最优化的执行计划
3 有了执行计划后,就是实际执行这个语句了
sql执行的这3步都是要花时间的,为了提高执行的效率,sqlserver会把sql的执行计划缓存,只要sql相同就不再生成执行计划,而是从缓存中去取了,这样就效率高了。
刚才说了,只是条件不同的那些语句,是可以通过一种方法来使sqlserver来使用缓存的执行计划的,这样我们的sql的效率就提高了,我要给你讲的就是如何使用参数化的sql的方法。
public void ModifyPwd()
{
//'@Userpwd' 的单引号不需要
string sql = "update UserInfo set Userpwd=@Userpwd where Userid=@userName";
SqlParameter[] par = new SqlParameter[2];
SqlParameter par1 = new SqlParameter();
par1.ParameterName = "Userpwd";
//这里的数据类型必须和数据库的字段类型一致
par1.SqlDbType = SqlDbType.VarChar;
par1.Value = m_pwd;
par[0] = par1;
SqlParameter par2 = new SqlParameter();
par2.ParameterName = "userName";
par2.SqlDbType = SqlDbType.VarChar;
par2.Value = m_userName;
par[1] = par2;
SqlHelper.ExecuteNonQuery(sql,par);
}