传参的两种方式

  SQL语句的执行不可缺少参数的传递,传递参数直接拼接SQL语句不可避免会遇到SQL注入问题,会造成很严重的系统安全问题,所以一般会使用 SetParameterValue("@abc", abc),拼接一个可变的参数集合parms ,在SQl语句中使用如下

  

 <dataCommand name="SubmitProductEntryAudit" database="Write" commandType="Text">
    <commandText>
      <![CDATA[
UPDATE IPP3.dbo.Product_EntryInfo
SET EntryStatus = 1
WHERE ProductSysNo = @ProductSysNo
      ]]>
    </commandText>
    <parameters>
      <param name="@ProductSysNo" dbType="Int32"/>
    </parameters>

  这样做的最明显好处就是能够避免SQl注入问题,也能够灵活的设置参数和赋值。

  上面的方法虽然好,但是在有些时候还是会暴露出不足的,例如当前端的业务逻辑比较复杂的时候,比如多条件查询语句的时候,我们不能够确定用户是否回去选择一个条件,如果在SQL中判断参数的话,会造成SQl服务器的压力,所以最好的做法是传到SQL语句中有值筛选条件,这样的话我们可以在cs后台中拼接我们的SQl语句条件。

  

CustomDataCommand command = DataCommandManager.CreateCustomDataCommandFromConfig("QueryPagedMerchantBrandList");
            using (var sqlBuilder = new DynamicQuerySqlBuilder(command.CommandText,
                command, queryFilter, string.IsNullOrEmpty(queryFilter.SortFields) ? "SysNo DESC" : queryFilter.SortFields))
            {
                sqlBuilder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND,
                    "mb.[MerchantSysNo]", DbType.Int32, "@MerchantSysNo", QueryConditionOperatorType.Equal, queryFilter.VendorSysNo);

                sqlBuilder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND,
                   "b.BrandName_Ch", DbType.String, "@BrandName", QueryConditionOperatorType.Like, queryFilter.BrandName);

                sqlBuilder.ConditionConstructor.AddCondition(QueryConditionRelationType.AND,
                    "mb.[Status]", DbType.String, "@Status", QueryConditionOperatorType.Equal, queryFilter.Status);

                command.CommandText = sqlBuilder.BuildQuerySql();
                List<Merchant_BrandInfo> resultList = command.ExecuteEntityList<Merchant_BrandInfo>();
                int totalCount = Convert.ToInt32(command.GetParameterValue("@TotalCount"));

                if (resultList != null && resultList.Count > 0)
                {
                    foreach (var item in resultList)
                    {
                        item.AttachmentList =CommonDA.GetEntryAttachmentTypeListBySource(item.SysNo.Value,2);
                    }
                }
                return new QueryResult<Merchant_BrandInfo>()
                {
                    PageInfo = new PageInfo() { PageIndex = queryFilter.PageIndex, PageSize = queryFilter.PageSize, TotalCount = totalCount, SortBy = queryFilter.SortFields },
                    ResultList = resultList
                };
            }

  这两种方式基本上就能够满足一般的传递参数需求。当然这里的方法的复用性要求很高,一个好的架构能够兼容各种不同的需求,满足不同的业务需求。

  记录工作中点点滴滴。

时间: 2024-12-07 12:29:42

传参的两种方式的相关文章

senchaTouch 给组件传参的两种方式

在senchaTouch 页面跳转中,有时我们需要将其前一个页面的相关参数传入到新的页面或者新的控件中,这是我们该如何传递参数进去呢,一下有两种方式: var arg;//定义将要 传入的参数 Ext.define('MyApp.view.Init',{ extend:'Ext.Container', id:'chat_more_btm', xtype:'init', config:{ layout:'fit', myarg:arg//把将要传入的参数映射到一个属性上面 }, initializ

Vue路由传参的几种方式

原 Vue路由传参的几种方式 2018年07月28日 23:52:40 广积粮缓称王 阅读数 12613 前言:顾名思义,vue路由传参是指嵌套路由时父路由向子路由传递参数,否则操作无效.传参方式可以划分为params传参和query传参,params传参又可以分为url中显示参数和不显示参数两种方式.具体区分和使用后续分析. 参考官网:https://router.vuejs.org/zh/guide/essentials/navigation.html params传参(url中显示参数)

3.struts2接收页面传参的三种方式

Struts2通过拦截器机制封装了三种接收页面参数的方式: 1.属性驱动 2.模型驱动(有两种) Domain ModelDriven 1.属性驱动:这种方式比较简单,只要你直接在页面定义变量并且符合以下两个规则,就会自动接收值. 规则1:你变量的名字和页面的name属性一致 规则2:生成对应的get set方式 Action写法: public class ParamAction { private String username; private String password; publi

vue 路由跳转,路由传参的几种方式

1. router-link <router-link :to="{ path: 'yourPath', params: { name: 'name', dataObj: data }, query: { name: 'name', dataObj: data } }"> </router-link> 2. $router方式跳转 this.$router.push({ path: 'yourPath', query: { name: 'name', dataO

SpringBoot整合Mybatis传参的几种方式

转自https://blog.csdn.net/irelia_/article/details/82347564 在SpringBoot整合Mybatis中,传递多个参数的方式和Spring整合Mybatis略微有点不同,下面主要总结三种常用的方式 一.顺序传参法 Mapper层: 传入需要的参数 public interface GoodsMapper { public Goods selectBy(String name,int num); }1234Mapper.xml: *使用这种方式,

mybatis传参的几种方式

1,@Param @参考文章 @Select("select s_id id,s_name name,class_id classid from student where  s_name= #{aaaa} and class_id = #{bbbb}")  public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id); @Select(....)注解的作

页面传参的几种方式

页面之间传值的几种方法 1.Get方式 发送页代码:Response.Redirect("WebFormA2.aspx?name=" + TextBox1.Text); 接收页代码: this.TextBox1.Text = Request["name"];            //this.TextBox1.Text=Request.Params["name"];            //this.TextBox1.Text=Request

Github 上传代码的两种方式

上传本地代码/文件->Github 折腾了半天时间... Github前期准备部分 1)登录github,新建一个 repository 2)repository 命名 3)Github是一个托管平台,相当于一台服务器,如果想对其进行操作,还必须安装Git客户端,使用相应的git指令对其进行操作 Github客户端下载&安装 github客户端下载地址:https://git-scm.com/download 如果是windows操作系统,选择如上 ↑ Github客户端配置 1)进入到需要

HttpClient 调用WebAPI时,传参的三种方式

public void Post() { //方法一,传json参数 var d = new { username = " ", password = " ", grant_type = "password", appcode = " ", companyid = " ", version = "1.0", }; var data = JsonConvert.SerializeObjec