大家对拼接SQL语句有什么好的解决方案吗?问题是,
在代码里拼接的话,代码量会很大,修改起来不方便,
用存储过程的话,极端情况下要为每一个表编写存储过程查询

解决方案 »

  1.   

    最好不要拼接sql.
    有时sql里面的值也可以包含 单引号,双引号等,
    这样会和外面的单引号,双引号等 混淆,并且会出错,
    最好用参数赋值啊,能避免一些问题~

      

  2.   


    真是的!这个法不错,但不知还有没有其它的办法,我是说,用LINQ的话,三层会不会被破坏掉嘞?
      

  3.   

    如果是防止注入的话,用参数比较方便。
    自己定义一个类似的方法:
             /// <summary>
            /// 根据SQL语句和参数建立IDbCommand
            /// </summary>
            /// <param name="SQL">SQL语句,SQL中可以包含参数信息,参数名为以0开始的递增整数,对应paramValues中值的下标</param>
            /// <param name="paramValues">参数值,需要与SQL中的参数一一对应,为空时表示没有参数</param>
            /// <returns>IDbCommand</returns>
            protected IDbCommand MakeParamCommand(string SQL, IEnumerable paramValues)
            {
                int paramIndex = 0;
                IDbCommand command = NewCommand();
                if (paramValues != null)
                    foreach (object paramValue in paramValues)
                    {
                        String paramName = Convert.ToString(paramIndex++);
                        IDataParameter param = command.CreateParameter();
                        param.ParameterName = paramName;
                        param.Value = paramValue;
                        command.Parameters.Add(param);
                    }
                command.CommandText = SQL;
                return command;
            }用的时候这样:
    MakeParamCommand("select * from User where UserId = @0 and Name = @1", new object[]{ id, name })
    如果还要更加方便的生成SQL可以参考http://blog.csdn.net/danjiewu/archive/2008/10/15/3080750.aspx
      

  4.   

    就算不是防止注入也应该用参数...拼SQL字符串在任何情况下都不是工业化生产的规范方法...
      

  5.   

    最好不要拼接sql. 
    有时sql里面的值也可以包含 单引号,双引号等, 
    这样会和外面的单引号,双引号等 混淆,并且会出错, 
    最好用参数赋值啊,能避免一些问题~ 
    最好用存储过程,存储过程有很多优点,比如执行速度快比较安全。。
      

  6.   

    新系统,LINQ绝对不会破坏三层结构。老系统就很难说了。LINQ其实只是实现在语言级别上,其它的没变化。
      

  7.   

    用参数和拼接SQL是两回事情拼接SQL语句一样可以用参数传递值,
    问题是因为查询条件不同,
    所有参数也要动态声明,动态添加,
    结果等同于是拼接SQL语句,如果要避免拼接,该如何做嗫?用LINQ,刚看了下,条件定时,也是动态添加滴,参考
    LINQ to SQL语句(23)之动态查询
    http://kb.cnblogs.com/page/42489/?page=2只有使用LINQ这一条路子?
      

  8.   

    用LINQ,刚看了下,条件定时,也是动态添加滴, 
    =>
    用LINQ,刚看了下,条件不定时,也是动态添加滴, 
      

  9.   

    开发经验不是很多,
    自己用的时候,如果相似类型的sql语句用的比较多的,可以写成函数,
    将需要的参数传入,根据不同的情况生成不同的语句LINQ大家都看好这,应该也不错,自己认为可以试试
      

  10.   

        ConditionSet conditions = new ConditionSet(); 
        conditions.Add(new SimpleCondition("Category_CategoryName", "Seafood")); 
        conditions.Add(new SimpleCondition("ProductName",  ConditionOperator.Contains, "Coffee")); 
        conditions.Add(new SimpleCondition("UnitPrice",  ConditionOperator.LargerThan,  2.5)); 
        List<ProductsView> products = new ProductsViewDAO().Search(conditions);像这样的方式呢?
      

  11.   

    不拼SQL
    使用 SqlParameter 传参数
      

  12.   

    用LINQ是可以,但是不知道LINQ能不能实现复杂的SQL
      

  13.   

    我喜欢 sql 拼接,一天不拼一天难受。
      

  14.   

    学习下  ORM里查询这里也是笨重的东西~~~
      

  15.   

    ORM面对复杂的业务和查询,比拼接更恼火,还不容易查找错误!