我想知道如何SqlParameter
知道没有指定的类型吗?
例如,在实例化参数对象时,您不需要指定 DB 类型。以某种方式执行命令时,.net 会为您处理此问题。在幕后是否有某种转换正在发生?当你做/不明确指定类型时是否有成本?
最佳答案
Is there a cost when you do / don't specify the type explicitly?
是的,而且成本可能很大。它与客户端转换无关,而是与服务器端执行有关。您应该阅读 Under the Table - How Data Access Code Affects Database Performance .可能出现的一些问题是:
SqlCommand.Parameters.AddWithValue("@someparam", "somestring")
结果参数是 NVARCHAR
类型。如果您的查询包含子句 WHERE somecolumn = @someparam
和 somecolumn
是 VARCHAR 类型并已索引,则类型不匹配将阻止索引使用。 SqlCommand.Parameters.AddWithValue("@someparam", "somestring")
它将导致具有参数类型 NVARCHAR(10)
的查询当您使用 SqlCommand.Parameters.AddWithValue("@someparam", "anotherstring")
它将导致查询的参数类型为 NVARCHAR(13)
这将被视为不同的查询,并产生不同的计划。随着时间的推移,您可以使用数百个计划来污染服务器计划缓存,每个可能的参数长度都有一个。当存在多个参数时,这种情况可能会加剧,每种长度组合都会创建自己的计划 其他类型也可能存在问题,但字符串是最臭名昭著的罪魁祸首。再次,阅读链接的文章,是高度相关的。
关于.net - SqlParameter 如何知道类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32490005/