sql server 数据类型以及SqlParameter赋值时遇到的问题
Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。 Unicode 数据使用 SQL Server 中的 nchar、varchar 和 ntext 数据类型进行存储。 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 smallint 从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。 tinyint 从 0 到 255 的整型数据。存储大小为 1 字节。
需要注意的是
当表中有一字段@MOStatus为tinyint时,而且同时有一个MOQueue_Create的插入记录的存储过程。
如果在调用存储过程的时候这样写
command.Parameters.Add(new SqlParameter("@MOStatus", 0));
就会抛出异常,过程或函数 'MOQueue_Create' 需要参数 '@MOStatus',但未提供该参数。
而实际上你已经提供了该参数,Debug进来发现command.Parameters["@MOStatus"].Value的值为Null,
原来是因为给该参数的赋值未成功。
但是如果你这样写
SqlParameter mo = new SqlParameter("@MOStatus", SqlDbType.TinyInt);
mo.Value = 0;
command.Parameters.Add(mo);
则不会有问题。
同时smallint同样有此问题。