大家对拼接SQL语句有什么好的解决方案吗? 大家对拼接SQL语句有什么好的解决方案吗?问题是,在代码里拼接的话,代码量会很大,修改起来不方便,用存储过程的话,极端情况下要为每一个表编写存储过程查询 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好不要拼接sql.有时sql里面的值也可以包含 单引号,双引号等,这样会和外面的单引号,双引号等 混淆,并且会出错,最好用参数赋值啊,能避免一些问题~ 真是的!这个法不错,但不知还有没有其它的办法,我是说,用LINQ的话,三层会不会被破坏掉嘞? 如果是防止注入的话,用参数比较方便。自己定义一个类似的方法: /// <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 就算不是防止注入也应该用参数...拼SQL字符串在任何情况下都不是工业化生产的规范方法... 最好不要拼接sql. 有时sql里面的值也可以包含 单引号,双引号等, 这样会和外面的单引号,双引号等 混淆,并且会出错, 最好用参数赋值啊,能避免一些问题~ 最好用存储过程,存储过程有很多优点,比如执行速度快比较安全。。 新系统,LINQ绝对不会破坏三层结构。老系统就很难说了。LINQ其实只是实现在语言级别上,其它的没变化。 用参数和拼接SQL是两回事情拼接SQL语句一样可以用参数传递值,问题是因为查询条件不同,所有参数也要动态声明,动态添加,结果等同于是拼接SQL语句,如果要避免拼接,该如何做嗫?用LINQ,刚看了下,条件定时,也是动态添加滴,参考LINQ to SQL语句(23)之动态查询http://kb.cnblogs.com/page/42489/?page=2只有使用LINQ这一条路子? 用LINQ,刚看了下,条件定时,也是动态添加滴, =>用LINQ,刚看了下,条件不定时,也是动态添加滴, 开发经验不是很多,自己用的时候,如果相似类型的sql语句用的比较多的,可以写成函数,将需要的参数传入,根据不同的情况生成不同的语句LINQ大家都看好这,应该也不错,自己认为可以试试 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);像这样的方式呢? 不拼SQL使用 SqlParameter 传参数 用LINQ是可以,但是不知道LINQ能不能实现复杂的SQL 我喜欢 sql 拼接,一天不拼一天难受。 学习下 ORM里查询这里也是笨重的东西~~~ ORM面对复杂的业务和查询,比拼接更恼火,还不容易查找错误! 有用过 Microsoft.StyleCop 代码检查的吗 告诉我如何修改这个XML 各位兄弟现在都在用什么聊天工具阿??? 求助啊,基本问题,可真的卡住我啦,谁帮帮我啊!!!怎么样在一个事件里引用别的控件的事件啊!!!在线等啊!!! 急!高手、MVP来帮帮忙呀!关于用XmlSerializer序列化继承对象问题。 Windows服务程序的启动顺序,回复者都有分! 中国证监会会歌 将d:\temp\1\下面所有的txt文件加s怎么变 asp.net留言问题 主窗体:mainfarm?在线等!!! 怎么改写动态html? 蜘蛛纸牌.中午休息的时候搞定的,有兴趣的挑战下.
有时sql里面的值也可以包含 单引号,双引号等,
这样会和外面的单引号,双引号等 混淆,并且会出错,
最好用参数赋值啊,能避免一些问题~
真是的!这个法不错,但不知还有没有其它的办法,我是说,用LINQ的话,三层会不会被破坏掉嘞?
自己定义一个类似的方法:
/// <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
有时sql里面的值也可以包含 单引号,双引号等,
这样会和外面的单引号,双引号等 混淆,并且会出错,
最好用参数赋值啊,能避免一些问题~
最好用存储过程,存储过程有很多优点,比如执行速度快比较安全。。
问题是因为查询条件不同,
所有参数也要动态声明,动态添加,
结果等同于是拼接SQL语句,如果要避免拼接,该如何做嗫?用LINQ,刚看了下,条件定时,也是动态添加滴,参考
LINQ to SQL语句(23)之动态查询
http://kb.cnblogs.com/page/42489/?page=2只有使用LINQ这一条路子?
=>
用LINQ,刚看了下,条件不定时,也是动态添加滴,
自己用的时候,如果相似类型的sql语句用的比较多的,可以写成函数,
将需要的参数传入,根据不同的情况生成不同的语句LINQ大家都看好这,应该也不错,自己认为可以试试
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);像这样的方式呢?
使用 SqlParameter 传参数