我正在编写一个可以使用SQLite DB或MySql DB的程序。 (如果不止一个人必须使用它,网络基础设施等......)

我写了一个通用DBType接口和两个基于DB类型实现它的类。有一个函数DataTable GetAllRows(tableName),正如你所期望的那样,它简单地检索表的所有行并填充一个System.Data.DataTable。对于SQLite,我使用了SQLIte connector

而对于MySql我已经使用了MySql connector。

现在的问题是,当我使用专用的DataReader(从连接器提供)读取行时,DataTable使用从此连接器返回的类型设置列类型。 SQLite连接器为DateTime字段使用System.DateTime,MySql使用MySql.Data.Types.MySqlDateTime。

我还实现了一个实体提供者框架,因此我隐式地将每个检索到的DataRow转换为实体(按需),因此DateTime字段将成为相应实体类中的DateTime字段。

例如,假设在DB中有一个表格:

userTable:

field "userName" as string,

field "date" as DateTime一行:

"asd" 2000/01/01我为这个表调用GetAllRows,现在我有一个DataTable和2列:

第一列是字符串字段,第二列是System.DateTime或MySqlDateTime,具体取决于我用于此运行的数据库的类型。

该行将被转换为实体

class userTableEntity

{

string name;

DateTime data;

/* methods... */

implicit operator userTableEntity(DataRow row);

}

userTableEntity u = datarow; //uses the implicit operator如果我想返回并将实体转换为DataRow,则必须使用如下所示的内容:

MyDataRow[userFieldName] = entity.name;

MyDataRow[dataFieldName] = entity.data;如果我使用SQLite,则没有问题。如果我使用的是MySql,则MyDataRow[dataFieldName] = entity.data行会抛出一个类型异常,因为MyDataRow[dataFieldName]的类型是MySqlDateTime,但entity.data是System.DateTime

当然,我可以在分配字段之前在SQLite / MySql之间切换,但是我有类似75个表的很多DateTime字段,所以我不想每次出于明显原因都创建一个switch case(或if)。

我试着制作一个MyDateTime类,它与这些运算符进行内部转换:

implicit operator DateTime

implicit operator MySql.Data.Types.MySqlDateTime但是这些运算符将永远不会被调用,因为表达式MyDataRow[dataFieldName]的类型是object,而不是DateTime或MySqlDateTime!我也不能写一个隐式操作符来对象,因为MyDateTime类是对象的子类型,所以不允许。

请注意,MySql.Data.Types.MySqlDateTime有一些有用的方法:

public static explicit operator DateTime(MySqlDateTime val);

public DateTime GetDateTime();

public DateTime Value { get; }和ctor:

public MySqlDateTime(DateTime dt);我如何安排代码来执行像MyDataRow[dataFieldName] = entity.data这样的操作,无一例外?我可以更改entity.data的类型,但我不想每次都执行一次switch case,而且我更愿意在读取数据表时维护它(在列中不更改类型)。

mysqldatareader获取整行数据给datarow_基于数据库类型的c#set datarow DateTime字段相关推荐

  1. mysqldatareader获取整行数据给datarow_如何从DataReader中获得DataRow

    这个需求的关键是: 所要获取的DataRow对象的结构要和真实的数据库结构相同 总体上分为俩个大方法: 1---使用DataSet或者是DataTable自身的Load方法   和   DataAda ...

  2. mysqldatareader获取整行数据给datarow_SqlDataReader的用法(读取1整行)

    datareader对象提供只读单向数据的快速传递,单向:您只能依次读取下一条数据;只读:DataReader中的数据是只读的,不能修改;相对地,DataSet中的数据可以任意读取和修改 01.usi ...

  3. mysqldatareader获取整行数据给datarow_C# sqladapter 与sqldataReader

    ADO.NET提供了丰富的数据库操作,在这些操作中SqlConnection和SqlCommand类是必须使用的,但接下来可以分为两类操作: 第一类是用SqlDataReader直接一行一行的读取数据 ...

  4. Datatable表格点击某个单元格可以获取整行数据

    场景: 点击图中所属区域,可以看到该区域对应的一行信息. 解决方案: 在定义列的js中,进行处理: {             data: 'name',             title: '所属 ...

  5. 若依的框架怎么样_基于bootstrapTable的若依框架如何获取表格选中行的整行数据?...

    导语 项目是基于若依框架写的,大部分的底层技术都是bootstrap. 最近在写一个项目的时候遇见一个需求,需要将子页面表格中选中的数据回传给父页面.为了减少网络请求,所以就准备直接使用子父页面传值. ...

  6. Request —— 获取请求行数据 获取请求头数据 获取请求体数据

    1. request对象和response对象的原理     1. request和response对象是由服务器创建的.我们来使用它们     2. request对象是来获取请求消息,respon ...

  7. 【easyui】easyui datagrid加载成功之后选定并获取首行数据

    //加载成功之后,选定并获取首行数据 onLoadSuccess:function(data){ alert("grid加载成功");var rows=$('test').data ...

  8. Request_获取请求行数据_方法介绍

    request功能:     1. 获取请求消息数据         1. 获取请求行数据             * GET /day14/demo1?name=zhangsan HTTP/1.1 ...

  9. SQL查询最大值,返回整行数据

    SQL查询最大值,返回整行数据 1.问题 部分数据如下,未完整展示.如何从 table_a 表中查询 p_postions 列的最大值对应的一行数据? 2.解答 方法1:先排序,再取第一条 SELEC ...

最新文章

  1. 浅谈人工智能应对数字化转型挑战的5个领域
  2. 「后端小伙伴来学前端了」Vue中利用全局事件总线实现组件之间通信
  3. android ble 实现自动连接,Android:自动重新连接BLE设备
  4. java form的时间格式_SpringMvc接收日期表单提交,自动转换成Date类型方法
  5. 51CTO,博客的显示有问题啊
  6. 全Sql语句实现SBO事务日志记录与查询
  7. SQL必知必会-组合查询
  8. ASP.NET页面生命周期概述(转载)
  9. Swift3 页面顶部实现拉伸效果代码
  10. 三维坐标绕轴坐标旋转公式
  11. 事务及其传播行为的通俗易懂的讲解
  12. 基于标准的多媒体视频对讲系统
  13. 从0到1CTFer成长之路-第二章-Web文件上传漏洞
  14. matlab 载波相位估计,光纤通信相干检测系统中波形处理与载波相位估计的研究...
  15. JSP空间上当受骗篇
  16. 微信企业号服务器搭建,微信企业号开发之如何建立连接
  17. Libuv源码解析 - uv_loop整个初始化模块
  18. 电脑新加内存条后 游戏崩溃 浏览器卡死 电脑蓝屏
  19. 【分治算法】大整数乘法
  20. 数值分析·学习 | 拉格朗日插值法matlab实现

热门文章

  1. 亚马逊日本站|所需认证指南
  2. 2022秋 - C实验A类 –实验1 顺序结构
  3. 快速测量电子体温计方案
  4. 模拟ic版图设计工程师是做什么的?薪资及就业前景如何?
  5. 最好诠释的设计传承——江诗丹顿的Historiques Aronde 1954系列腕表
  6. css3实现360度旋转的圆
  7. Yakit: 集成化单兵安全能力平台使用教程·MITM交互式劫持篇
  8. ccf题库java_CCF题库
  9. 自动化,躺着收钱!闲鱼自动发货机器人来啦~
  10. [总结] 大神成神之路?你会了吗?