Cách tốt nhất để tìm giá trị liệt kê System.Data.DbType
cho loại thư viện lớp cơ sở trong không gian tên hệ thống là gì?Làm thế nào để giải quyết System.Type để System.Data.DbType?
Trả lời
Cách thông thường là có bản đồ kiểu, với tất cả các loại được hỗ trợ (trình kết nối/nhà cung cấp khác nhau hỗ trợ các loại khác nhau) được ánh xạ rõ ràng. Dưới đây là bản đồ kiểu cho Dapper:
typeMap = new Dictionary<Type, DbType>();
typeMap[typeof(byte)] = DbType.Byte;
typeMap[typeof(sbyte)] = DbType.SByte;
typeMap[typeof(short)] = DbType.Int16;
typeMap[typeof(ushort)] = DbType.UInt16;
typeMap[typeof(int)] = DbType.Int32;
typeMap[typeof(uint)] = DbType.UInt32;
typeMap[typeof(long)] = DbType.Int64;
typeMap[typeof(ulong)] = DbType.UInt64;
typeMap[typeof(float)] = DbType.Single;
typeMap[typeof(double)] = DbType.Double;
typeMap[typeof(decimal)] = DbType.Decimal;
typeMap[typeof(bool)] = DbType.Boolean;
typeMap[typeof(string)] = DbType.String;
typeMap[typeof(char)] = DbType.StringFixedLength;
typeMap[typeof(Guid)] = DbType.Guid;
typeMap[typeof(DateTime)] = DbType.DateTime;
typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
typeMap[typeof(byte[])] = DbType.Binary;
typeMap[typeof(byte?)] = DbType.Byte;
typeMap[typeof(sbyte?)] = DbType.SByte;
typeMap[typeof(short?)] = DbType.Int16;
typeMap[typeof(ushort?)] = DbType.UInt16;
typeMap[typeof(int?)] = DbType.Int32;
typeMap[typeof(uint?)] = DbType.UInt32;
typeMap[typeof(long?)] = DbType.Int64;
typeMap[typeof(ulong?)] = DbType.UInt64;
typeMap[typeof(float?)] = DbType.Single;
typeMap[typeof(double?)] = DbType.Double;
typeMap[typeof(decimal?)] = DbType.Decimal;
typeMap[typeof(bool?)] = DbType.Boolean;
typeMap[typeof(char?)] = DbType.StringFixedLength;
typeMap[typeof(Guid?)] = DbType.Guid;
typeMap[typeof(DateTime?)] = DbType.DateTime;
typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset;
typeMap[typeof(System.Data.Linq.Binary)] = DbType.Binary;
Để có được một DbType có liên quan, tất cả các bạn cần làm là:
var type = typeMap[typeof(string)]; // returns DbType.String
Bạn xem tài liệu - SQL Server Data Type Mappings (ADO.NET).
Ánh xạ cho các nhà cung cấp khác cũng là documented.
Chúng cung cấp cho bạn đủ thông tin để viết trình chuyển đổi.
Nhưng có cách nào nhà cung cấp không thuyết phục? – Mike
@Mike - Tôi không thể hình dung được. Các cơ sở dữ liệu và nhà cung cấp khác nhau được triển khai theo nhiều cách khác nhau. Gần nhất bạn có thể làm cho nó để tìm ánh xạ phổ biến nhất như tài liệu và sử dụng chúng trong một lớp học phổ biến. – Oded
Tôi hiểu. Tôi tự hỏi tại sao có DbType trong Framework? Giá trị của nó gần giống với các loại BCL vì vậy tôi nghĩ rằng nên có một ánh xạ mặc định. – Mike
Tôi không nhận thức được bất kỳ logic tự động, bạn nên làm như lập bản đồ cho mình vì đó là các kiểu khác nhau và .NET Framework không thể làm điều này cho bạn một mình.
thấy ở đây các bảng vẽ bản đồ toàn bộ: SQL Server Data Type Mappings (ADO.NET) bạn có thể tưởng tượng rằng cho Oracle, MySQL, SQLite và động cơ khác có thể có bảng tương tự cũng tùy thuộc vào nhà cung cấp dữ liệu .NET/kết nối
Bạn có thể chuyển đổi TypeCode
-DbType
sử dụng phương thức ConvertTypeCodeToDbType
trong System.Web.UI.WebControls.Parameter
lớp học: Parameter.ConvertTypeCodeToDbType Method. Để lấy TypeCode, bạn có thể sử dụng phương thức Type.GetTypeCode(Type type)
.
Tại sao trên trái đất này là trên 'System.Web'? – talles
- 1. Làm thế nào để giải quyết Microsoft.VisualStudio.ExtensionManager.MissingReferencesException
- 2. Làm thế nào để giải quyết cuộn chậm trong UITableView
- 3. Làm thế nào để giải quyết lỗi Rack Lint?
- 4. Làm thế nào để giải quyết một Lỗi Capybara :: ElementNotFound
- 5. Làm thế nào để giải quyết javax/mail/MessagingException?
- 6. Checkstyle: Làm thế nào để giải quyết "Hidden Field" Lỗi
- 7. Làm thế nào để giải quyết lỗi max_user_connections MySQL
- 8. Làm thế nào để giải quyết crossencess chéo trong OOP?
- 9. Làm thế nào để giải quyết lỗi này trong C#?
- 10. Làm thế nào để giải quyết Autofac InstancePerHttpRequest
- 11. Làm thế nào để giải quyết lỗi "[BUG] Phân đoạn"?
- 12. làm cách nào để giải quyết brut.androlib.AndrolibException
- 13. làm thế nào để giải quyết giả lập này: ERROR: Tên da lạ 'WVGA800' giải pháp
- 14. Làm thế nào để giải quyết khó khăn của tôi làm cho các thuật toán?
- 15. NHibernate: Làm thế nào để giải quyết việc này "phương ngữ" cấu hình vấn đề
- 16. Làm thế nào để giải quyết vấn đề Rope Bridge bằng một thuật toán?
- 17. Làm thế nào để giải quyết rò rỉ bộ nhớ swing nghe?
- 18. Làm thế nào để giải quyết các nhà cung cấp OpenID thời gian chết?
- 19. Làm thế nào để giải quyết ODE với ngưỡng nội bộ?
- 20. Làm thế nào để giải quyết GeoCoordinates sang ngôn ngữ nói?
- 21. Làm thế nào để giải quyết xung đột đối chiếu với Khuôn khổ thực thể?
- 22. Xây dựng bộ thử nghiệm không thành công - (android.test.suitebuilder.TestSuiteBuilder $ FailedToCreateTests). Làm thế nào để giải quyết?
- 23. PostgreSQL: làm thế nào để giải quyết "tràn trường số" vấn đề
- 24. Làm thế nào để giải quyết showStatusIcon trên InputConnection không hoạt động
- 25. Làm thế nào để giải quyết/var/www sao chép/ghi cho phép từ chối?
- 26. Làm thế nào để giải quyết xung đột giữa tăng :: shared_ptr và sử dụng std :: shared_ptr?
- 27. Làm thế nào để dễ dàng biết liệu Ninject có thể giải quyết một lớp học
- 28. Làm thế nào để giải quyết sự mơ hồ khi đối số là null?
- 29. Làm thế nào để Intellisense tự động giải quyết mất tích Sử dụng chỉ thị
- 30. Suối Closed lỗi trong twitter4j làm thế nào để giải quyết
Điều này có vẻ tốt cho tôi. Tôi nghĩ rằng không có nhu cầu thực sự cho tôi trong các phiên bản Nullable, vì 'Type.GetGenericTypeDefinition' và' Type.GetGenericArguments' sẽ giúp giải quyết giá trị Nullable và kiểu cơ bản. – Mike