2023年6月21日发(作者:)
SQL语句能这样写?——拆分SQL语句在写DAL层的时候,对数据库的操作仅⽤到增删改查,却要写那么多⽅法来应对功能上的需求,为了图个⽅便,我进⾏了⼀次⼤胆的尝试:将查询内容全部参数化,提⾼SQL语句的功能。代码思路如下: //根据需要更新商品某字段 public int UpdateGoods(GoodsInfo goods, string field,object value) { string sql = "update T_GoodsInfo set @field =@value where goodsname=@goodsname"; SqlParameter[] sp = { new SqlParameter("@goodsname",ame), new SqlParameter("@value",value), new SqlParameter("@field",field) }; return NonQuery(sql, sp); }刚开始代码⼤概就是这样吧,我想通过传参把要查的字段写活,应该能⽤,实际测试中出错了。究其原因,问题出在了SQL语句上:字段(field)是字符串的格式,调⽤⽅法时传进去的值是带引号的,在SQLserver中处理(有去引号的步骤)这条语句时将本想写的字段看成了字符串处理,没有可识别的字段,所以就出现了有参数值没有对应字段的尴尬。把原因定位到了引号上,就要从引号出⼊⼿,想了想之前VB⾥⽤加号连接SQL语句,就试了试,代码就成了这样://根据需要更新商品某字段 public int UpdateGoods(GoodsInfo goods, string field,object value) { string sql = "update T_GoodsInfo set " + field + " =@value where goodsname=@goodsname"; SqlParameter[] sp = { new SqlParameter("@goodsname",ame), new SqlParameter("@value",value), new SqlParameter("@field",field) }; return NonQuery(sql, sp); }这时候传进来的field没有引号了,就成了要查的字段名。这个⽅法的功能也就更强⼤了。⼀个引号就能决定语句的可⽤性,由此可见拼接的重要性。还可以把表名也参数化,在这个⽅法的功能扩⼤的同时,需要的参数个数也变多了。有兴趣的话可以尝试⼀下。⾄于它在数据库中的执⾏状况、会带来什么不好的影响,我还不清楚。欢迎留⾔⼀起探讨。
2023年6月21日发(作者:)
SQL语句能这样写?——拆分SQL语句在写DAL层的时候,对数据库的操作仅⽤到增删改查,却要写那么多⽅法来应对功能上的需求,为了图个⽅便,我进⾏了⼀次⼤胆的尝试:将查询内容全部参数化,提⾼SQL语句的功能。代码思路如下: //根据需要更新商品某字段 public int UpdateGoods(GoodsInfo goods, string field,object value) { string sql = "update T_GoodsInfo set @field =@value where goodsname=@goodsname"; SqlParameter[] sp = { new SqlParameter("@goodsname",ame), new SqlParameter("@value",value), new SqlParameter("@field",field) }; return NonQuery(sql, sp); }刚开始代码⼤概就是这样吧,我想通过传参把要查的字段写活,应该能⽤,实际测试中出错了。究其原因,问题出在了SQL语句上:字段(field)是字符串的格式,调⽤⽅法时传进去的值是带引号的,在SQLserver中处理(有去引号的步骤)这条语句时将本想写的字段看成了字符串处理,没有可识别的字段,所以就出现了有参数值没有对应字段的尴尬。把原因定位到了引号上,就要从引号出⼊⼿,想了想之前VB⾥⽤加号连接SQL语句,就试了试,代码就成了这样://根据需要更新商品某字段 public int UpdateGoods(GoodsInfo goods, string field,object value) { string sql = "update T_GoodsInfo set " + field + " =@value where goodsname=@goodsname"; SqlParameter[] sp = { new SqlParameter("@goodsname",ame), new SqlParameter("@value",value), new SqlParameter("@field",field) }; return NonQuery(sql, sp); }这时候传进来的field没有引号了,就成了要查的字段名。这个⽅法的功能也就更强⼤了。⼀个引号就能决定语句的可⽤性,由此可见拼接的重要性。还可以把表名也参数化,在这个⽅法的功能扩⼤的同时,需要的参数个数也变多了。有兴趣的话可以尝试⼀下。⾄于它在数据库中的执⾏状况、会带来什么不好的影响,我还不清楚。欢迎留⾔⼀起探讨。
发布评论