如何强制SqlCommand不将参数编码为unicode / nvarchar?

KallDrexx

我有一个包含8100万条记录的数据库表,这些记录用于将特定URL与请求生成URL的客户绑定在一起。为了使从此表中查询到的URL更加合理,我将URL字段设置为a varchar(500)(我们看到的最大URL长度为410)。

当我在SSMS中运行以下查询时,我立即获得结果:

select CustomerId, UserId, Requested from LogURL where LogData = '<url>'

然后,我在C#中编码了一个方法来执行此查询,以供我处理日志文件:

    public UrlInformation GetInfoForUrl(string url)
    {
        const string query = "select top 1 CustomerId, UserId, Requested from LogURL where LogData = @url";

        using (var command = new SqlCommand(query, _connection))
        {
            command.Parameters.Add(new SqlParameter
            {
                DbType = DbType.AnsiString,
                ParameterName = "url",
                Value = url
            });

            using (var reader = command.ExecuteReader())
            {
                UrlInformation info = null;

                // Sometimes there are multiple results, just take the first
                if (reader.Read())
                {
                    var customerId = reader.GetInt32(0);
                    var userId = reader.GetInt32(1);
                    var date = reader.GetDateTime(2);

                    info = new UrlInformation
                    {
                        CustomerId = customerId,
                        UserId = userId,
                        RequestedDate = date
                    };
                }

                return info;
            }
        }

(请注意,此类在构造函数中创建并打开sql连接,并在Dispose()中对其进行处理,因此应重复使用同一连接)。

该代码运行时,command.ExecuteReader()每个需要3-5秒(通过StopWatch衡量)。打开sql探查器,我看到实际执行的查询是:

exec sp_executesql N'select top 1 CustomerId, UserId, Requested from LogURL where LogData = @url',N'@url nvarchar(346)',@url=N'<url>'

由于它将url转换为a,nvarchar因此没有利用我的varchar()引用,似乎正在进行全表扫描。

如何获取C#代码以将URL视为varchar而不是nvarchar?

丹尼尔·吉梅内斯

由于您使用的是SqlParameter,因此不妨使用SqlDbType而不是DbType如果这样做,则可以使用SqlDbType.VarChar代替DbType.Ansi

command.Parameters.Add(new SqlParameter
{
    SqlDbType = SqlDbType.VarChar,
    ParameterName = "url",
    Value = url
});

另外,从MSDN,DbType参数DbType通过覆盖基本DbType属性来获取或设置参数SqlDbType

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mssql选择所有编码错误的nvarchar

来自分类Dev

处理 nvarchar 参数与十进制

来自分类Dev

为nvarchar和varchar分配空间

来自分类Dev

如何将nvarchar转换为int

来自分类Dev

如何将nvarchar转换为整数?

来自分类Dev

如何在SQL Server中平均NVARCHAR

来自分类Dev

如何在nvarchar上使用between子句?

来自分类Dev

如何在 phpMyAdmin 中创建 NVARCHAR 列?

来自分类Dev

过程期望类型为'ntext / nchar / nvarchar'的参数'@statement'

来自分类Dev

过程期望类型为'ntext / nchar / nvarchar'的参数'@params'

来自分类Dev

在表值参数中将nvarchar长度设置为最大

来自分类Dev

nvarchar(max) 上的参数查询显示为 ntext 错误

来自分类Dev

如何从NVARCHAR(MAX)属性解析编码为UTF-8的XML?

来自分类Dev

用省略号将nvarchar(max)截断为nvarchar(n)

来自分类Dev

如何用希伯来语传递SQL存储过程NVARCHAR参数?

来自分类Dev

Hibernate-如何将参数绑定为nvarchar

来自分类Dev

如何用希伯来语传递SQL存储过程NVARCHAR参数?

来自分类Dev

如何获得数据类型为nvarchar的函数的结果

来自分类Dev

如何转换在SQL中存储为nvarchar的Excel日期?

来自分类Dev

使Hibernate绑定参数类型“ char(1)”而不是“ nvarchar(4000)”吗?

来自分类Dev

MSSQL NVARCHAR(MAX)作为过程参数和变量声明的缺点

来自分类Dev

为什么nvarchar的默认大小为255(MSSQL Server)?

来自分类Dev

使用IEntityTypeConfiguration将列类型设置为NCHAR而不是NVARCHAR

来自分类Dev

为什么nvarchar的默认大小为255(MSSQL Server)?

来自分类Dev

按月获取数据类型为nvarchar的数据

来自分类Dev

将 BIGINT 转换为显示为 Nvarchar 列

来自分类Dev

如何找出nvarchar(128)和UNIQUEIDENTIFIER消耗的不同空间量?

来自分类Dev

如何在C#中创建NVarchar(max)Sqlparameter?

来自分类Dev

使用TSQL的OpenQuery:如何在nvarchar列中插入NULL?

Related 相关文章

  1. 1

    mssql选择所有编码错误的nvarchar

  2. 2

    处理 nvarchar 参数与十进制

  3. 3

    为nvarchar和varchar分配空间

  4. 4

    如何将nvarchar转换为int

  5. 5

    如何将nvarchar转换为整数?

  6. 6

    如何在SQL Server中平均NVARCHAR

  7. 7

    如何在nvarchar上使用between子句?

  8. 8

    如何在 phpMyAdmin 中创建 NVARCHAR 列?

  9. 9

    过程期望类型为'ntext / nchar / nvarchar'的参数'@statement'

  10. 10

    过程期望类型为'ntext / nchar / nvarchar'的参数'@params'

  11. 11

    在表值参数中将nvarchar长度设置为最大

  12. 12

    nvarchar(max) 上的参数查询显示为 ntext 错误

  13. 13

    如何从NVARCHAR(MAX)属性解析编码为UTF-8的XML?

  14. 14

    用省略号将nvarchar(max)截断为nvarchar(n)

  15. 15

    如何用希伯来语传递SQL存储过程NVARCHAR参数?

  16. 16

    Hibernate-如何将参数绑定为nvarchar

  17. 17

    如何用希伯来语传递SQL存储过程NVARCHAR参数?

  18. 18

    如何获得数据类型为nvarchar的函数的结果

  19. 19

    如何转换在SQL中存储为nvarchar的Excel日期?

  20. 20

    使Hibernate绑定参数类型“ char(1)”而不是“ nvarchar(4000)”吗?

  21. 21

    MSSQL NVARCHAR(MAX)作为过程参数和变量声明的缺点

  22. 22

    为什么nvarchar的默认大小为255(MSSQL Server)?

  23. 23

    使用IEntityTypeConfiguration将列类型设置为NCHAR而不是NVARCHAR

  24. 24

    为什么nvarchar的默认大小为255(MSSQL Server)?

  25. 25

    按月获取数据类型为nvarchar的数据

  26. 26

    将 BIGINT 转换为显示为 Nvarchar 列

  27. 27

    如何找出nvarchar(128)和UNIQUEIDENTIFIER消耗的不同空间量?

  28. 28

    如何在C#中创建NVarchar(max)Sqlparameter?

  29. 29

    使用TSQL的OpenQuery:如何在nvarchar列中插入NULL?

热门标签

归档