根据Varchar型字段login Select数据时
原来没有指定类型SqlDbType.VarChar
comd.Parameters.Add("@login",login.Text.Trim());
后来指定了DB类型SqlDbType.VarChar
comd.Parameters.Add("@login",SqlDbType.VarChar);
comd.Parameters["@login"].Value = login.Text.Trim();
为什么后一种的效率比前一种快几十倍啊(试验过),希望高手指点。
-----
还有是不是根据Nvarchar型字段查询的效率,远低与varchar型啊?

解决方案 »

  1.   

    就不能用ID查吗?
    不用ID就建立索引
      

  2.   

    能相差这么多么?是你调用的问题吧你用不同类型的时候的代码也不一样呀?
    SqlDbType.VarChar 
    comd.Parameters.Add( "@login ",login.Text.Trim()); 

    SqlDbType.VarChar 
    comd.Parameters.Add( "@login ",SqlDbType.VarChar); 
    comd.Parameters[ "@login "].Value   =   login.Text.Trim(); 用同样的结构测试一下吧!!
      

  3.   

    原来没有指定类型SqlDbType.VarChar
    comd.Parameters.Add( "@login ",login.Text.Trim());
    后来指定了DB类型SqlDbType.VarChar
    comd.Parameters.Add( "@login ",SqlDbType.VarChar);
    comd.Parameters[ "@login "].Value   =   login.Text.Trim(); 
    ===============================================================个人理解:
    你用parameters参数传递,在第一种的情况下,@login是要判断是那个参数类型;二是要再遍历参数类型,找到对应的类型后,再对其进行赋值。
    时间浪费在了参数类型的判断上了。对于nvarchar和varchar的区别:
      从存储方式上: nvarchar是按字符存储的,而 varchar是按字节存储的;
    从存储量上考虑: varchar比较节省空间,因为存储大小为字节的实际长度,而 nvarchar是双字节存储;nvarchar:不管是一个字符还是一个汉字,都存为2个字节;
     varchar: 汉字是2个字节,其他字符存为1个字节;
    这点要注意:varchar 适合与存储英文和数字; nvarchr一般用于存储中文或其他语言的输入,因为 这样,可以防止到其他语言平台上出现乱码的问题。
      

  4.   

    你string不设置类型可能默认按nvarchar处理了,然后搜寻的时候还要类型转化,时间就耗到这儿了。