一个字段A在sql server数据库中是varchar(8)System.Data.SqlClient.SqlParameter[] arrParam = new System.Data.SqlClient.SqlParameter[1] { new System.Data.SqlClient.SqlParameter("@Col2",SqlDbType.VarChar,8) };
            arrParam[0].Value = "sdfsd很好啊,哈哈哈。";为什么明明指定长度了还报错,提示要截断,不是使用参数后应自动截断了吗?
还有,无论是SqlDbType.NVarChar,还是SqlDbType.VarChar程序判断"sdfsd很好啊,哈哈哈。"Length都是13,这个我知道应该是String是Unicode的问题,但是指定了SqlDbType.VarChar后不会处理吗?怎么使用c#参数处理varchar类型啊?

解决方案 »

  1.   

    对于varchar来说,1个汉字占两个字符,你可以用nvarchar
      

  2.   

    拜托,占两个字节我知道,我问的是为什么已经指定是varchar而且还指定长度8了,为什么不自动截取,而且参数的Size属性是以字节为单位的
    字符串“sdfsd很好啊,哈哈哈。”应该截取varchar编码下的8位,即“sdfsd很”,实事上程序没截取,而是报错,说超出长度,不想给你解释这么多,你自己试一下我一直都怀疑的事还是发生了:
    对于字符型参数来讲,.net的参数长度实际上是字符数量,与数据库中字段长度是不一回事的,除非数据库字段是varchar类型,否则这个长度都是有出入的,而我见过的人基本上没有注意过这个问题,大家都在错?
    怎么才能对varchar类型进行参数处理呢?要保证按照数据字段的长度
      

  3.   

    不会处理,你可以加个arrparam「0」.size=8试试
      

  4.   

    问题是对于varchar类型,你指定了字段长度在c#中是错误的,这个知道吗?