关于SqlParameter的问题 C#

chuju999 2015-01-05 08:07:50
经常写数据访问层的时候,会写这些代码:

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命令的
...全文
175 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南小鱼 2015-01-06
  • 打赏
  • 举报
回复
引用 9 楼 u012779901 的回复:
[quote=引用 6 楼 lovelj2012 的回复:] 它并不解析,在数据库执行的时候,直接把@variable替换成SqlParameter[]对应的值 至于可以直接执行,这个是SQL SERVER自己的特性 你拿Profile监控一下执行的语句就知道了
请问怎么用 Profile 监测啊??有没有相关的资料看看[/quote]
chuju999 2015-01-06
  • 打赏
  • 举报
回复
引用 6 楼 lovelj2012 的回复:
它并不解析,在数据库执行的时候,直接把@variable替换成SqlParameter[]对应的值 至于可以直接执行,这个是SQL SERVER自己的特性 你拿Profile监控一下执行的语句就知道了
请问怎么用 Profile 监测啊??有没有相关的资料看看
我叫小菜菜 2015-01-05
  • 打赏
  • 举报
回复
好有研究精神,赞一个!
江南小鱼 2015-01-05
  • 打赏
  • 举报
回复
它并不解析,在数据库执行的时候,直接把@variable替换成SqlParameter[]对应的值 至于可以直接执行,这个是SQL SERVER自己的特性 你拿Profile监控一下执行的语句就知道了
smthgdin_020 2015-01-05
  • 打赏
  • 举报
回复
你可以不用管,ADO.net会根据provider自己去判断数据类型。有兴趣的话可以用一些软件去跟踪执行时的sql,比如sqlserver本身提供的profile。
  • 打赏
  • 举报
回复
它没解析。。。它只是自动的帮你declare而已。。。
  • 打赏
  • 举报
回复
ado.net并不是去拼凑什么“完整的sql命令”,因此对于一些数据库系统,你可能需要考虑“到底是使用@命名还是 ? 号用来作为参数,到底只支持一种还是两种都支持,到底有没有对参数提交顺序有要求”等等问题。这些都是因为 ado.net 根本不揪扯这些所谓参数的实现,因此每一种数据库就都有自己的“标准”需要你遵守。
  • 打赏
  • 举报
回复
参数化查询并不去拼接什么字符串,而是直接传给数据库系统。相应的数据库系统,都支持参数化查询,只是调用语法稍有不同(例如 t-sql 语言中有 sp_executesql 等等好几种写法),而 ado.net 并没有什么“生产一段完整的sql命令的”的功能。
猴子写代码 2015-01-05
  • 打赏
  • 举报
回复
他会解析传递的参数类型,如果字符类型则加上'',如果数字类型则不加

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧