当前位置: 代码迷 >> C# >> 关于SqlParameter的有关问题 C
  详细解决方案

关于SqlParameter的有关问题 C

热度:152   发布时间:2016-05-05 05:17:57.0
关于SqlParameter的问题 C#
经常写数据访问层的时候,会写这些代码:

string sql = @"UPDATE  dbo.Table1
                                SET     ProductID = @ProductID ,
                                        YearNum = @YearNum ,
                                        Batch = @newBatch
                                WHERE   BatchID = @originalBatch ";

                SqlParameter[] parameters = {   new SqlParameter("@ProductID", productID), 
                                                new SqlParameter("@YearNum", year), 
                                                new SqlParameter("@newBatch", newBatch), 
                                                new SqlParameter("@originalBatch", originalBatch) };
代码中的 year 是DateTime类的,newBatch是字符串的,

如果不用 SqlParameter的话, 手写sql语句的时候,都要给 日期和字符串加上 ' ' 两个冒号,如:

string sql = @"UPDATE  dbo.Table1
SET     YearNum = '2015-01-01'; ,
Batch = 'a2015b1'

我很好奇想知道, SqlCommand 是怎么根据SqlParameter去生产一段完整的sql命令的
------解决思路----------------------
参数化查询并不去拼接什么字符串,而是直接传给数据库系统。相应的数据库系统,都支持参数化查询,只是调用语法稍有不同(例如 t-sql 语言中有 sp_executesql 等等好几种写法),而 ado.net 并没有什么“生产一段完整的sql命令的”的功能。
------解决思路----------------------
ado.net并不是去拼凑什么“完整的sql命令”,因此对于一些数据库系统,[email protected] ? 号用来作为参数,到底只支持一种还是两种都支持,到底有没有对参数提交顺序有要求”等等问题。这些都是因为 ado.net 根本不揪扯这些所谓参数的实现,因此每一种数据库就都有自己的“标准”需要你遵守。
------解决思路----------------------
它并不解析,在数据库执行的时候,[email protected][]对应的值
至于可以直接执行,这个是SQL SERVER自己的特性

你拿Profile监控一下执行的语句就知道了