积极答复者
SqlDbType.VarChar的问题

问题
-
ShangPinBianHao字段是 nchar 10,
sqlCommand = new SqlCommand(@"SELECT GUID, ShangPinBianHao, ShangPinMingCheng FROM stock_ShangPinXinXi WHERE (ShangPinBianHao LIKE @ShangPinBianHao + N'%') ORDER BY ShangPinBianHao", conn);
sqlCommand.Parameters.Add(new SqlParameter("@ShangPinBianHao", SqlDbType.VarChar, 10));
sqlCommand.Prepare();
sqlCommand.Parameters["@ShangPinBianHao"].Value = HiddenParam.Value.ToString().Trim();
下面的查询中, HiddenParam.Value.ToString().Trim()=1 如果用SqlDbType.Char/NChar/NVarChar 查找到的记录只有ShangPinBianHao=1的一条记录, 用VarChar就是正确的.
我想如果是=号,非like 就没有这个问题.
另外不真不知道 字段类型是nchar ,用SqlDbType.Char/NChar 为什么都可以呢.
谢谢- 已移动 Sheng Jiang 蒋晟 2009年11月3日 2:21 SQL Data Access问题 (发件人:Visual C#)
答案
全部回复
-
你好!这里主要的区别是 char 与 varchar。在设置 SqlParameter 时应该设置和数据字段对应的数据类型。char、nchar 长度固定(比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节包括17个空字符);varchar、nvarchar 是可变长度nchar、nvarchar 用于存储 Unicode 字符,比如中文根据上面的描述,两者最终形成SQL的差另如下。使用 char(10) 、Nchar(10) 作为参数类型时最终解释的 SQL 为 Where ShangPinBianHao LIKE '1 ' + N'%'使用 varchar(10) 、Nvarchar(10) 作为参数类型时最终解释的 SQL 为 Where ShangPinBianHao LIKE '1' + N'%'由于需要使用固定长度的情况较少,在设计数据时一般使用 varchar, nvarchar 来存储字符。
知识改变命运,奋斗成就人生! -
谢谢,这个我明白了
另外想问下:
sqlCommand.Parameters.Add(new SqlParameter("@ShangPinBianHao", SqlDbType.VarChar, 10));
或者
sqlCommand.Parameters.Add(new SqlParameter("@ShangPinBianHao", SqlDbType.Char, 10));
sqlCommand.Prepare();
sqlCommand.Parameters["@ShangPinBianHao"].Value = HiddenParam.Value.ToString().Trim();
我输入了10个中文字,为什么没有溢出呢?
谢谢!