c# – .Net框架中是否有可用于表示AnsiString的内置类?
对于小巧玲珑的我需要建立对传递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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |