执行带参数的Sql语句
第一种写法:
SqlParameter myparm = new SqlParameter();
myparm.ParameterName = txtparm.Text;
myparm.SqlDbType = SqlDbType.NVarChar;
myparm.Size = 20;
myparm.Value = txtvalue.Text;
string sql = "update myTable set name='nnn' where id=@id";
SqlHelper.ExecuteNonQuery(SqlHelper.conn, CommandType.Text, sql, myparm);第二种写法:
string sql = "update myTable set name='nnn' where id='"+txtvalue.Text+"'";
SqlHelper.ExecuteNonQuery(SqlHelper.conn, CommandType.Text, sql, null);=================
这两种写法结果一样,难道是id=@id 这里是变量,即当txtparm.Text等于xyz,txtvalue.Text等于123的时候,执行下来变为xyz=123???
第一种写法:
SqlParameter myparm = new SqlParameter();
myparm.ParameterName = txtparm.Text;
myparm.SqlDbType = SqlDbType.NVarChar;
myparm.Size = 20;
myparm.Value = txtvalue.Text;
string sql = "update myTable set name='nnn' where id=@id";
SqlHelper.ExecuteNonQuery(SqlHelper.conn, CommandType.Text, sql, myparm);第二种写法:
string sql = "update myTable set name='nnn' where id='"+txtvalue.Text+"'";
SqlHelper.ExecuteNonQuery(SqlHelper.conn, CommandType.Text, sql, null);=================
这两种写法结果一样,难道是id=@id 这里是变量,即当txtparm.Text等于xyz,txtvalue.Text等于123的时候,执行下来变为xyz=123???
第一种方法比较安全,防止恶意的SQL注入,
第二种是直接拼接起来的,呵呵,效果差不多
myparm.Value = txtvalue.Text; 这句就是给@id赋值了第二个是拼接字符串参数化查询可以防止sql注入!!!
http://topic.csdn.net/u/20090808/19/6339d889-d8d9-454e-99af-acdbfed4dc49.html
SqlParameter[] para = new SqlParameter[]{"@id",要赋的值};
这种可以放SQL注入
下面是我经常用到的方法
/// <summary>
/// 执行增,删,改的方法,支持存储过程
/// </summary>
/// <param name="connectionString">连接字符串</param>
/// <param name="commandType">命令类型,如果是sql语句,则为CommandType.Text,如果是存储过程则为CommandType.StoredProcdure</param>
/// <param name="cmdText">SQL语句或者存储过程名称</param>
/// <param name="para">SQL参数,如果没有参数,则为null</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(CommandType commandType, string cmdText, params SqlParameter[] para)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = commandType;
cmd.CommandText = cmdText;
if (para != null)
{
foreach (SqlParameter sp in para)
{
cmd.Parameters.Add(sp);
}
}
conn.Open();
return Convert.ToInt32(cmd.ExecuteNonQuery());
}
}