我已经使用企业库很长时间了。我们正在将数据库中的列类型varchar更改为nvarchar以支持不同的语言。我们确实有一些使用传统方式连接到数据库的遗留代码,比如使用命令对象。在代码中,当创建sqlparameters时,指定参数数据类型是int还是varchar。在那里很容易从varchar更改为nvarchar。
但我想知道在使用企业库时,我们指定.net数据类型,如字符串,我相信企业库在调用存储过程时会在内部将该类型转换为sqldatatype。
排序(命令,“@db.AddInParameter”,DbType.String,SortOrder)
企业库内部转换的数据类型是什么?varchar还是nvarchar?在遗留代码中到处使用nvarchar安全吗?
发布于 2011-08-30 04:01:05
正如我在评论中所说,不需要担心数据类型转换.net会自动处理和处理它。ADO.net能够将String数据类型转换为varchar、nvarchar、char、ntext和SqlServer中的text数据类型。指定存储过程数据类型将通知ADO.net在SqlServer中将数据转换为其适当的数据类型。
为什么我们要在创建
对象时指定数据类型,或者在.net负责的情况下调用AddInParameter?
编辑:根据您在评论中提出的问题,有:
db.Parameters.AddWithValue("@SortOrder", SortOrder);这不是指定输入参数的数据类型所必需的。
发布于 2011-08-30 22:08:28
我假设您使用的是SQL Server。
DbType.String用于nvarchar,而DbType.AnsiString用于varchar。http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx
由于您正在调用存储过程,因此您的参数将自动转换为在存储过程中指定的任何字符串类型。例如,如果输入是DbType.String,但参数是varchar,则SQL Server会为您转换它。但是不要反向操作(在DbType.AnsiString中的代码中,但是存储过程需要nvarchar),因为您只能在存储过程中获得ansi字符。
//Don't do this! you will get 'h?ello' in the SP instead of 'hܒello'
SqlParameter("input", "h\u0712ello") { DbType = System.Data.DbType.AnsiString });此外,在EntLib中,有一种方法可以调用存储过程,而无需指定参数名称和数据类型。如下所示:
//calls AddToInventory stored procedure
//the 2 parameters are automatically mapped.
db.ExecuteNonQuery("AddToInventory", 1, "Life Jacket");https://stackoverflow.com/questions/7235135
复制相似问题