模糊查询“%”转换问题

问题由来:

在做一个系统,功能是充值查询,在此用的是模糊查询(比如我要查询一个叫小明的同学,我只输入“小”表内就出现所有姓名中有关小的同学)在做的过程中遇到一个问题,都知道模糊查询少不了%的应用。

在此我还写过关于D层访问数据库的初始写法,方法没有错,放到SQL sever里是可以找到的,但是写在VS里需要强转,就遇到了下图的问题。

在让大家看下我数据库表的设计作为参考。注意我每个列明的数据类型~

下面对比下我的两段代码书写格式!

初始可用的模糊查询代码:

//模糊查询 充值表
        public class RechargeRecordDAL:IDAL.RechargeRecordIDAL
        {
            
            public List<ReChargeInfo> SltStudent(ReChargeInfo ReChargeInfo)
            {
                SQLHelper sqlHelper = new SQLHelper();
                SqlParameter[] sqlParams =
                {
                    new SqlParameter("@CardNo",ReChargeInfo.CardNo),
                    new SqlParameter("@RechCash",ReChargeInfo.RechCash),
                    new SqlParameter("@RechDate",ReChargeInfo.RechDate),
                    new SqlParameter("@UserID",ReChargeInfo.UserID)
                };
                string sql = @"SELECT * FROM[T_ReCharge]WHERE (CardNo like '%'+@CardNo+'%') and (RechCash like '%'+@RechCash+'%') and (RechDate >=@RechDate) and (UserID like '%'+@UserID+'%')";
                DataTable dt = sqlHelper.ExecuteQuery(sql, sqlParams, CommandType.Text);
                ConvertSQLHelper convert = new ConvertSQLHelper();
                List<ReChargeInfo> list = convert.ConvertToModel<ReChargeInfo>(dt);
                return list;
            }
        }

解决异常处理后的代码

        /// <summary>
        /// 模糊查询
        /// </summary>
        /// <param name="recharge"></param>
        /// <returns></returns>
        public List<ReChargeInfo> CombineInquire(ReChargeInfo recharge)
        {
            SQLHelper sqlHelper = new SQLHelper();
            SqlParameter[] sqlParams =
            {

                    new SqlParameter("@CardNo","%"+ recharge.CardNo +"%"),
                    new SqlParameter("@RechCash","%"+ recharge.RechCash +"%"),
                    new SqlParameter("@UserID","%"+ recharge.UserID +"%"),
                    new SqlParameter("@RechDate",recharge.RechDate)
                };
            string sql = @"SELECT * FROM[T_Recharge] WHERE (CardNo like @CardNo) and (RechCash like @RechCash)
             and (UserID like @UserID) and RechDate = @RechDate";
            DataTable dt = sqlHelper.ExecuteQuery(sql, sqlParams, CommandType.Text);
            ConvertSQLHelper convert = new ConvertSQLHelper();
            List<ReChargeInfo> cdquery = convert.ConvertToModel<ReChargeInfo>(dt);
            return cdquery;

        }

经过对比细心的人可以看出我把“%”挪了位置,把“%”从SQL语句中转移到了SqlParameter了。因为提示给我的信息是通配符,放到数据库SQL Sever中是可以查出来的,但是在转换中D层的通配符转换不过来,就把通配符拿出来。

此文章仅供参考,希望能给遇到这个问题的人带来帮助。

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值