2.起码这样的参数不如1的参数方式安全
>>>如果这两 个变量中存在单引号怎么办,这样就会出错
使用Parameter其实这两个问题有一个相同点,就是
Parameter

解决方案 »

  1.   

    没什么区别吧,
    区别可能就是,万一有的sql实现不支持exec 关键字(有没有这样的?),你就惨了,
    第一种方法可以封装这种存储过程的调用方式,谁知道C#怎么跟数据库通信的,封装起来,
    他微软都封装了,你就不用担心你的代码一直了,要万一不能运行,那是微软不支持这种数据库,不是你的代码不支持。
    没根据瞎分析的,呵呵
      

  2.   

    第二个问题就得这样了this.SelectCommand.CommandText = "INSERT Articles ([Title],[Content])VALUES(@title, @content)";
    this.SelectCommand.Parameters.Add("@title", title);
    this.SelectCommand.Parameters.Add("@content", content);
      

  3.   

    title.Replace("'","''"),content.Replace("'","''")
      

  4.   

    没有强制类型转换的拼接给SQL注入提供方便之门
      

  5.   

    我也发现.net里面有很多方法可以实现同一种目的,没必要
      

  6.   

    我发现很多人不知道去利用MS写的好好的SQLHelper...
      

  7.   

    http://www.hidotnet.com/documents/sqlhelper/hiDotNet.Data.SqlHelperMembers.html
      

  8.   

    1.方法1更通用更安全一点
    不过,还是建议你使用SQL Helper或者可以学习一下。
    可以看一下petShop的东西
    ==============
    静态方法
    CreateCommand 创建SqlCommand命令,指定数据库连接对象,存储过程名和参数.  
    ExecuteDataset 已重载。 执行指定数据库连接字符串的命令,返回DataSet.  
    ExecuteDatasetTypedParams 已重载。 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回DataSet.  
    ExecuteNonQuery 已重载。 执行指定连接字符串,类型的SqlCommand.  
    ExecuteNonQueryTypedParams 已重载。 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回受影响的行数.  
    ExecuteReader 已重载。 执行指定数据库连接字符串的数据阅读器.  
    ExecuteReaderTypedParams 已重载。 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回DataReader.  
    ExecuteScalar 已重载。 执行指定数据库连接字符串的命令,返回结果集中的第一行第一列.  
    ExecuteScalarTypedParams 已重载。 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回结果集中的第一行第一列.  
    ExecuteXmlReader 已重载。 执行指定数据库连接对象的SqlCommand命令,并产生一个XmlReader对象做为结果集返回.  
    ExecuteXmlReaderTypedParams 已重载。 执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回XmlReader类型的结果集.  
    FillDataset 已重载。 执行指定数据库连接字符串的命令,映射数据表并填充数据集.  
    UpdateDataset 执行数据集更新到数据库,指定inserted, updated