• 很奇怪的一个问题,是关于sql参数化和传where in 参数的迷惑.请大伙给讲讲吧...小弟很迷糊现在.各位园友,拉兄弟一把!!


    报错的语句:     strSql.Append(" AND cu.CurrentSalesMan in (@CurrentSalesMans)");                                

                         db.AddParameter("@CurrentSalesMans", GetCommaPartionUserIDs(CurrentSalesMan));                     

    错误提示:Conversion failed when converting the nvarchar value '1,2,3,4,5,6,9,12,13,15,26,27,28,29' to data type int.

    可以运行的语句: strSql.Append(" AND cu.CurrentSalesMan in (" + GetCommaPartionUserIDs(CurrentSalesMan) + ")");                    

    cu.CurrentSalesMan  是 Int 类型.   

     GetCommaPartionUserIDs(CurrentSalesMan)的结果是:"1,2,3,4,5,6,9,12,13,15,26,27,28,29"

    我的问题是为什么参数化的那条语句不能运行.而拼接的语句能运行呢?

    我测试的结果是.:"1,2,3,4,5,6,9,12,13,15,26,27,28,29"是不是被参数化成了数据库中的  ('1,2,3,4,5,6,9,12,13,15,26,27,28,29') 而不是我们想要的: (1,2,3,4,5,6,9,12,13,15,26,27,28,29)

    数据库中当CurrentSalesMan 是nvarchar时候.

    use GoldHawk;

    select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in (1); select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in ('1');结果相同

    数据库中当CurrentSalesMan 是int时候.

    use GoldHawk;

    select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in (1); select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in ('1');结果相同

    结果也相同

    但是

    use GoldHawk;

    select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in (1,2); select COUNT(1) from dbo.EOS_Customers where CurrentSalesMan in ('1,2');

    下边的语句会报错..

    说明数据库在用 where In 的时候,会试图把in后边被逗号分割的每个元素转换成in前面字段的类型.如果转换成功.则正常运行.

    转换失败则会报转换失败的错误.如 :消息 245,级别 16,状态 1,第 1 行 在将 varchar 值 '1,2' 转换成数据类型 int 时失败。

  • 相关阅读:
    DIV3E 基环树
    Codeforces Round #663 (Div. 2) D.505
    统计2进制中1的数量
    bitset 用法笔记
    扩展欧几里得
    KM算法(二分图最大权匹配)
    C1. Errich-Tac-Toe (Easy Version) 米奇妙妙屋
    求逆元
    python——标识符及其命名规则
    python基础——python对象概述
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/2388246.html
Copyright © 2020-2023  润新知