日期:2014-05-17  浏览次数:20493 次

sqlparameter 要不要指定数据类型和大小?
C# code

    int id=0;
    string biaoti="asasa";
    SqlParameter[] mypa=new SqlParameter[2];
          mypa[0]=new SqlParameter("@id",id);
          mypa[1] = new SqlParameter("@biaoti", TextBox1.Text);
         



C# code

    int id=0;
    string biaoti="asasa";
    SqlParameter[] mypa=new SqlParameter[2];
          mypa[0]=new SqlParameter("@id",SqlDbType.Int,4);
         mypa[0].Value=id;
          mypa[1] = new SqlParameter("@biaoti", SqlDbType.NVarChar,50);
          mypa[1].Value=biaoti;




这2种有什么区别?第一种是不是会出错?

------解决方案--------------------
若没有指定类型和大小,则取决于你在新建字段的时候设置的类型和大小
------解决方案--------------------
没有限制而已,转换不成SQL输入参数的类型的话,就会报SQL的错误。
------解决方案--------------------
可以指定也可以不指定。
------解决方案--------------------
一般都指定。
int和datetime之类的一般就不指定长度了。
------解决方案--------------------
int不用,其他指定
------解决方案--------------------
根据需要使用如int就可不用指定大小
SqlParameter (String, SqlDbType) 用参数名称和数据类型初始化 SqlParameter 类的新实例。 
SqlParameter (String, SqlDbType, Int32) 用参数名称、SqlDbType 和大小初始化 SqlParameter 类的新实例。 
SqlParameter (String, SqlDbType, Int32, String) 用参数名称、SqlDbType、大小和源列名称初始化 SqlParameter 类的新实例。 

 

------解决方案--------------------
楼主,
那只是sqlparameter的构造函数啊
你还可以这样写
mypa[0]=new SqlParameter("@id",SqlDbType.Int,4,id);
------解决方案--------------------
区别就是显示转换和隐式转换,如果不声明类型是由数据库来进行隐式类型转换,异常也是由数据库抛出。如果声明类型异常直接由应用程序转换并抛出转换异常,还有个好处某些类型可以节省空间。