民族

SqlHelper中IN集合场景下的参数处理

19 10月 , 2018  

有人说要是引发一个汉子的心扉,就得先抓住他的肚子,其实对夫人呢是一样。

我手下有个古老的种,持久层用的凡古老的ADO.net。前片龙去昆明旅游,其中的一个色是云南民族村,通过导游介绍知道了一个古老的部族——基诺族,“基”在斯族内代表舅舅,“基诺”意为“跟在舅舅后止”,加以引申即为“尊崇舅舅的部族”,很风趣吧,这是我国最后一个为察觉并确认下来的少数民族,即第56独民族。
 项目里之ado.net和基诺族一样古老。

再有人口说,女人如达成得厅堂,下得厨房,其实对老公来说又何尝不是也?

民族 1

今昔,男神们纷纷展示起家庭主厨的另一方面,在电视娱乐节目中频频亮相,从青春少女到大妈,再到老婆婆,简直是联网吃。

话语说,项目里多少访问层,好多还是并底sql,这叫sql注入提供了可乘之机,为了系统安全,决定在个别的时间外,将它改变成为参数化。

这就是说会无见面做饭,对先生来说的确蛮关键呢?

其中,有只因多只订单号查询支付单的方,签名如下:

民族 2

public DataTable GetAlipayNotifyRecords(AlipayPaymentStatus status, params string[] trade_no)

01

灶台也是舞台。

哪位说小的灶台无法施展男人的拳脚。

孰说锅盘碗盏不可知表现男人的魅力。

萌老公黄小厨黄磊先生,以他帅气的外表与笑眯眯笑脸早已捕获了层出不穷阴人的心迹,可是让另外男人羡慕嫉妒妒恨的凡他还下得矣厨房,并且堪称大厨。

他在深夜食堂节目中,感觉各一样鸣小菜都死有味道,暖暖的发。

魅力伴随在一道道菜快速腾飞,加分不少。

民族 3

黄磊先生绝对是先生中做菜做得极其好的,做菜受到教授及得无比好之讲师。

就才是真的『暖男』

自我思念说之任何一个人口是谢霆锋,他巧出道时,我爱不释手他帅气的外表,那时,作为男生的自己,梦想在像他那样帅。实在自己吧特别优异,只是好好得无明了。

新生,偶然发现他当平缓缓美味节目,叫「十二鸣锋味」,他做菜时专注的金科玉律,真的比刚出道时更帅,因有人曾经说罢:专注的丈夫最帅。不信,你看看。

民族 4

那么,问题来了,坐sql里来in, 而 in(@no)的法门是无用的。

02

有人说,会起火的老公,不大男子主义,会疼人。

不错,你试想,如果你是一个持有大男子主义思想之先生,你见面下厨房做饭呢?

当今社会,喜欢大男子主义的女孩大多要喜欢无大男子主义的几近?作为丈夫,心里应该特别理解。

连无是说大男子主义的人口不好,而是会起火的先生太清楚体贴人,懂得怎样去好一个口。

作丈夫,愿意为它们生伙房,刀山火海又何妨呢?不是有人说呢,达成灶要齐战场。

岂惩罚也?  首先想到的凡针对性参数做拍卖:

03

张小娴还曾经说过:“拥抱一个易下厨的爱人,才是获得相同摆真正的长期饭票!”

其从没米饭票怎么用也?得慌靠你吧。就这样吃您确实地抓住了她的胃部。

卿以后不用再想不开饿肚子,他总是变着花样做不同之饭菜。

当它们下班回家,一桌子香喷喷的饭食,那种满足感是她于外围餐馆里无法获取的。

它好在闺密、朋友同同事面前很吹特吹你的抢眼厨艺,有人吗它们生伙房做饭,这也许是上辈子修来的福,让它情绪好,才会于她当生活是甜蜜甜蜜的。

它们还足以大概达几乎单好友带回家品尝你的手艺,受爱人等堂而皇之夸奖你,不就是相当夸她吗?

有人说,会做饭的女婿,人品都无会见无限差。

乃放在心上过吗?你当做饭时是心寒着脸呢?肯定不是。男人做饭时脸上总是挂在笑容,性格温和,做菜时不紧不慢,说话要物彬彬有礼,这样的汉子人都不见面尽差。

会召开菜之爱人是值得信任的。

民族 5

public DataTable GetAlipayNotifyRecords(AlipayPaymentStatus status, params string[] trade_no)
{
    string sql = @"select * from T_AlipayNotityRecord where trade_status=@trade_status and trade_no in(@trade_no)";
    //string inValue = "'" + string.Join("','", trade_no) + "'";//= string.Join(",", trade_no)
    string inValue = "";
    trade_no.ToList().ForEach(no => inValue += " union all select '" + no+"'");
    inValue = inValue.Substring(" union all".Length);
    List<SqlParameter> paramList = new List<SqlParameter>()
        {
             new SqlParameter("@trade_status",status.ToString()), 
             new SqlParameter("@trade_no",inValue),
        };
    var ds = SqlHelper.SqlDataSet(ConfigFile.PayCenterConnection, sql, CommandType.Text, paramList.ToArray());
    if (ds == null || ds.Tables.Count == 0)
        return null;
    return ds.Tables[0];
}

04

会面起火的先生勤快,懂得节约。

辛勤与节约是中华民族之美德。

恰巧所谓好下手丰衣足食,要一个人连饭都懒得做,很麻烦想像这男人能发出差不多努力。

辛勤能挣钱,没有谁富翁是懈怠的丁。

有人说勤俭节约是小男子主义的反映,我不得不说立刻是瞎扯。

今昔物质生活标准好了,浪费十分沉痛,但是,会起火的老公杜绝浪费,懂得节约。

一个家园,尤其是工薪阶层,上有老下有小,如果您不明白节约,你的生存用见面捉襟见肘。

如此这般的女婿值得珍惜与藏。

由此测试,无效。经分析会,sqlhelper会把您参数值当成字符串,不会见指向其举行转义。所以,不管怎么对参数值处理,都还是同一失误字符串。

05

会晤起火的老公工作有长理性,火候拿卡准确。

起火是极其讲究顺序的,一鸣小菜,不能够想当的混做,有工序要求,先开啊后召开呀,不可知召开什么,每一样步做多久,该怎么开,心里都得生只谱。试想,假如尚未眉目,不厚先后顺序,做出来的才干好吃也?

事实上,很多政工是相通的。

行事与做饭呢一样,思考的点子一样,行事吗重视先后顺序,当你能够举行一手好菜,我相信做事也非见面不同。

民族 6

会举行菜的丈夫还有许多长,比如自信、知足、无私,哪一个操守不是先生所急需之啊?所以,会做饭对丈夫来说十分重要。

以这样的规律为生想,只能是以单号分开来传递让sql了。那么巧sql的in可以经如下几种植艺术相当模拟实现:

  • sql里有临时表,可以in一个临时表–这时,可以考虑and trade_no
    in(select @p1 union all select @p2 union all…)的方式
  • 管sql民族的in集合,转换为一个就此or拼接起来的会师—即,and (trade_no=@p1
    or trade_no=@p2 or trade_no=@p3 or…)

一般来说代码是遵照后者的笔触解决了这问题:

public DataTable GetAlipayNotifyRecords(AlipayPaymentStatus status, params string[] trade_no)
{
    string sql = @"select * from T_AlipayNotityRecord where trade_status=@trade_status and ({0})";

    List<SqlParameter> paramList = new List<SqlParameter>()
        {
             new SqlParameter("@trade_status",status.ToString()), 
        };
    string sql1 = "";
    for (int i=0;i<trade_no.Length;i++)
    {
        sql1 += " or trade_no=@no" + i;
        paramList.Add(new SqlParameter("@no" + i, trade_no[i]));
    }
    sql = string.Format(sql, sql1.Substring(" or ".Length));

    var ds = SqlHelper.SqlDataSet(ConfigFile.PayCenterConnection, sql, CommandType.Text, paramList.ToArray());
    if (ds == null || ds.Tables.Count == 0)
        return null;
    return ds.Tables[0];
}

【结语】无意中起园子里看到同样首稿子,切莫拖欠在在的SqlHelper和DBHelper,很赞!

 

—–2016-12-13 09:39:32

【续】方法总比问题基本上

今日晨刷牙时,灵光一现,对于昨天底方案,不待经借助or或union的章程来再改sql的in了,即,可以一直扭转如下的sql语句:

select * from T_AlipayNotityRecord where trade_status=@trade_status and trade_no in(@no0,@no1,...)

程序代码在方的功底及稍微做拍卖:

public DataTable GetAlipayNotifyRecords(AlipayPaymentStatus status, params string[] trade_no)
{
    string sql = @"select * from T_AlipayNotityRecord where trade_status=@trade_status and trade_no in({0})";

    List<SqlParameter> paramList = new List<SqlParameter>()
{
        new SqlParameter("@trade_status",status.ToString()), 
};
    string sql1 = "";
    for (int i = 0; i < trade_no.Length; i++)
    {
        sql1 += ",@no" + i;
        paramList.Add(new SqlParameter("@no" + i, trade_no[i]));
    }
    sql = string.Format(sql, sql1.Substring(",".Length));

    var ds = SqlHelper.SqlDataSet(ConfigFile.PayCenterConnection, sql, CommandType.Text, paramList.ToArray());
    if (ds == null || ds.Tables.Count == 0)
        return null;
    return ds.Tables[0];
}

诸如此类子生成的sql就生直观了。比上面方案的尚略。

 

, , , , , , , , ,


相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图