加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – .Net框架中是否有可用于表示AnsiString的内置类?

发布时间:2020-12-15 21:18:14 所属栏目:百科 来源:网络整理
导读:对于小巧玲珑的我需要建立对传递AnsiString参数的支持. 数据库具有unicode和非unicode字符串,选择正确的参数类型有时至关重要. 特定参数的DbType.String与DbType.AnsiString会严重影响性能. 在短小精悍的我们动态传递参数,例如: QueryUser("select * from U
对于小巧玲珑的我需要建立对传递AnsiString参数的支持.

数据库具有unicode和非unicode字符串,选择正确的参数类型有时至关重要.

特定参数的DbType.String与DbType.AnsiString会严重影响性能.

在短小精悍的我们动态传递参数,例如:

Query<User>("select * from Users where Name=@Name",new {Name = "name"});

我有一个内部地图,说如果我看到typeof(String)我知道将param作为DbType.String传递

但是,我希望我的用户能够表示该字符串应该是一个AnsiString.匿名类不支持属性,因此我需要一个不同的类型.

显然我可以发明一个:

public class AnsiString 
{
    private readonly string str;
    public AnsiString(string str)
    {
        this.str = str;
    }

    public String Value { get { return str; } }
}

哪个会给我干净的API:

Query<User>("select * from Users where Name=@Name",new {Name = new AnsiString("name")});

但是,如果在System.Data或BCL中存在这样的类,为什么要创建一个.

在BCL或System.Data中是否存在类型我可以用作AnsiString的容器,与上面的示例具有相似的语义?

解决方法

在BCL或System.Data中没有这样的类,你必须自己滚动.

我们采用自定义类型,最终提供更细粒度的定制;此测试显示典型用法:

public void TestDbString()
{
    var obj = connection.Query("select datalength(@a) as a,datalength(@b) as b,datalength(@c) as c,datalength(@d) as d,datalength(@e) as e,datalength(@f) as f",new
        {
            a = new DbString { Value = "abcde",IsFixedLength = true,Length = 10,IsAnsi = true },b = new DbString { Value = "abcde",IsAnsi = false },c = new DbString { Value = "abcde",IsFixedLength = false,d = new DbString { Value = "abcde",e = new DbString { Value = "abcde",f = new DbString { Value = "abcde",}).First();
    ((int)obj.a).IsEqualTo(10);
    ((int)obj.b).IsEqualTo(20);
    ((int)obj.c).IsEqualTo(5);
    ((int)obj.d).IsEqualTo(10);
    ((int)obj.e).IsEqualTo(5);
    ((int)obj.f).IsEqualTo(10);
}

所以;它支持:

> ansi vs unicode
>固定与动态长度
>在动态长度的情况下,explict vs implicit(如果长度为< = 4000则为4000;否则为“max” - 这样可以保持查询计划的数量正常)
该类型在dapper内可用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读