zoukankan      html  css  js  c++  java
  • 总结:实例化SqlParameter时,如果是字符型,一定要指定size属性,还有制定具体的类型

    源地址

    在csdn上逛看到了这篇帖子,值得学习,就需要记录下来,转载给大家看!

    以前在实例化SqlParameter时,通常都是用下面的语句,没有设置size属性:

    new SqlParameter("@name", SqlDbType.Varchar) { Value = name };

    根据MSDN解释:如果未在 size 参数中显式设置 Size,则从 dbType 参数的值推断出该大小。
    我一直以为是从SqlDbType类型推断,实际上是从参数的值推断,比如"ab",则size值为2,"abcd",则size值为4,且经测试发现,size的值不同时,会导致执行计划不会重用,下面的代码:

    string sql = "select top 1 * from tb where name = @o";
    var para = new SqlParameter("@o", SqlDbType.VarChar) {Value = "ab"};
    SqlHelper.ExecuteReader(ReadConnectionString, CommandType.Text, sql, para);

    通过SqlProfiler捕获到的sql如下:

    exec sp_executesql N'select top 1 * from tb where name = @o',N'@o nvarchar(2)',@o=N'ab'

    如果把参数的值改成abcd,则通过SqlProfiler捕获到的sql如下:

    exec sp_executesql N'select top 1 * from tb where name = @o',N'@o nvarchar(4)',@o=N'abcd'

    通过下面的sql,可以看出执行计划是否有重用:

    --先清空执行计划缓存
    DBCC FREESYSTEMCACHE ('ALL')
    DBCC FREEPROCCACHE
    GO
    SELECT * FROM sys.dm_exec_cached_plans WHERE cacheobjtype = 'Compiled Plan'
    GO
    exec sp_executesql N'select top 1 * from tb where name = @o',N'@o nvarchar(2)',@o=N'ab'
    GO
    SELECT * FROM sys.dm_exec_cached_plans WHERE cacheobjtype = 'Compiled Plan'
    GO
    exec sp_executesql N'select top 1 * from tb where name = @o',N'@o nvarchar(4)',@o=N'abcd'
    GO
    SELECT * FROM sys.dm_exec_cached_plans WHERE cacheobjtype = 'Compiled Plan'
    GO

    最后的说明,实例化SqlParameter时,如果是字符型,一定要指定size属性,如:

    new SqlParameter("@name", SqlDbType.Varchar, 4000) { Value = name };

    如果是Int、Float、Bigint之类的参数,可以不用指定size属性

    另见13楼所说,不光要指明size的大小,还有制定具体的类型
    比如name是varchar类型的,如果不指明具体类型,sql接受的是nvarchar类型的,也会出现问题

    如下地址

    如果数据库中的数据类型和程序指定的数据类型不一致,可能会导致很多转换,导致性能的底下!








  • 相关阅读:
    May 24th 2017 Week 21th Wednesday
    May 23rd 2017 Week 21st Tuesday
    全球顶尖大学的UX课程资源,英文!
    如何设计出一款出色的结账表单
    快速完成网页设计,10个顶尖响应式HTML5网页模板助你一臂之力
    界面设计中如何增强CTA按钮召唤力?
    10个实用的UX设计作品推销小窍门
    UX术语详解:任务流,用户流,流程图以及其它全新术语
    让你不再恋家的9款小众时尚的酒店网站设计
    聊聊原型设计中的团队管理功能
  • 原文地址:https://www.cnblogs.com/pmars/p/2335811.html
Copyright © 2011-2022 走看看