zoukankan      html  css  js  c++  java
  • ADO.NET中带参数的Sql语句的陷阱

    1.使用Parameter

    //利用构造函数方式 ,不推荐这样写
    Parameter  p =new Parameter("@id",值);
    cmd.Parameters.Add(p);
    //利用对象初始化器的方式,推荐是这样写
    Parameter p =new Parameter()
    {ParameterName="@id",Value=""};
    cmd.Parameters.Add(p);

    //推荐和不推荐为了什么?在下面说

    2.使用Parameter数组

    //不推荐的写法
    Parameter[] pms =new Parameter[];
    {
           new Parameter("@id",值);
           ......
    };
    cmd.Parameter.AddRange(pms);
     
    //推荐的写法
       SqlParameter[] pms= {
         new SqlParameter("@id", SqlDbType.VarChar,50),
          .......
          } ;
       parameters[0].Value = "";
      cmd.Parameter.AddRange(pms);

    //推荐和不推荐是因为什么?在下面说

    3.Parameter("@id",值)的陷阱

    如上1和2中所说,不推荐Parameter("@id",值)的使用方式。为什么呢?

    原因是有一次这样写。

    new SqlParameter("@aa",0);  发现竟然奇怪的调用了 红色圈中的构造函数。

    结果就是数据库中原本赋过值的项,变成了null。

    clipboard[6]

    为什么0会被编译器看成MySqlDbType类型呢?

    原因是,MySqlDbType是一个枚举。0正好对应了Decimal类型。

    clipboard[7]

     

    所以为了避免这种情况,

    推荐使用对象初始化器,

    或者直接使用带DbType的构造函数实例化,然后再赋值。

    总之,直接用构造函数的方式有点略坑~
     
  • 相关阅读:
    Python之struct模块浅谈
    看头发知健康
    ZeroMQ:云计算时代最好的通讯库
    粗盐热敷疗法经验汇总
    百度2011校招笔试算法题一
    new/delete 和malloc/free 的区别一般汇总
    Trie字典树
    百度2012校招笔试题之全排列与组合
    百度2011校招笔试算法题二
    执行程序的内存分布总结
  • 原文地址:https://www.cnblogs.com/mcad/p/4212391.html
Copyright © 2011-2022 走看看