string sSQL = "INSERT INTO TB_USER(UID,Account,Password,Gender,Phone,Mobile,Email,IsEnabled,Comment) VALUES('{0}','{1}','{2}',{3},'{4}','{5}','{6}',{7},'{8}')";
            sSQL = string.Format(sSQL, User.UID, User.Account, User.Password, User.Gender, User.Phone, User.Mobile, User.Email, User.IsEnabled, User.Comment);
有如上一段程序,主要是用来拼接SQL字符串,但是如果字符串参数含有单引号会存在问题,所以我想重载string.Format函数,判断如果参数是字符串,替换里面的单引号为两个单引号有什么办法?

解决方案 »

  1.   

    string.Format不是用来拼SQL的……
    自己另外写个方法不好吗?
      

  2.   

    String不允许继承,用C#3.0的扩展方法试试
      

  3.   

    不能,也不必这样做,你如果要正确的来传递参数,应该使用Parameter传递参数,而不是拼Sql,因为这个用法实在有局限性,比如二进制的数据就没有办法传了。使用相应的Parameter类对象传递是最合适的,比如SqlParameter,可以使用如下:
    static void CreateSqlParameterOutput()
    {
        SqlParameter parameter = new SqlParameter("Description", SqlDbType.VarChar, 88);
        parameter.Direction = ParameterDirection.Output;
    }
      

  4.   

    SqlParameter   的方式感觉麻烦,效率是否也不如拼字符串?这种方式不需要对数据库创建什么存储过程吧?
      

  5.   

    使用SqlParameter也不一定要使用存储过程,像如下的语句就可以:string sql = "select id from table1 where id = @id"
    cmd.CommandText = sql;
    cmd.Parameters.Add("@id", 100);
    cmd.CommandType = CommandType.Text;
    object id = cmd.ExecuteScale();
    使用这种形式不会影响效率,只会提高精度度,也不能算麻烦。因为对一个参数来说,应该给它指定名称,类型,大小传入传出等参数。如果不指定,系统会自己花时间来匹配。