mysqldatareader获取整行数据给datarow_基于数据库类型的c#set datarow DateTime字段
我正在编写一个可以使用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字段相关推荐
- mysqldatareader获取整行数据给datarow_如何从DataReader中获得DataRow
这个需求的关键是: 所要获取的DataRow对象的结构要和真实的数据库结构相同 总体上分为俩个大方法: 1---使用DataSet或者是DataTable自身的Load方法 和 DataAda ...
- mysqldatareader获取整行数据给datarow_SqlDataReader的用法(读取1整行)
datareader对象提供只读单向数据的快速传递,单向:您只能依次读取下一条数据;只读:DataReader中的数据是只读的,不能修改;相对地,DataSet中的数据可以任意读取和修改 01.usi ...
- mysqldatareader获取整行数据给datarow_C# sqladapter 与sqldataReader
ADO.NET提供了丰富的数据库操作,在这些操作中SqlConnection和SqlCommand类是必须使用的,但接下来可以分为两类操作: 第一类是用SqlDataReader直接一行一行的读取数据 ...
- Datatable表格点击某个单元格可以获取整行数据
场景: 点击图中所属区域,可以看到该区域对应的一行信息. 解决方案: 在定义列的js中,进行处理: { data: 'name', title: '所属 ...
- 若依的框架怎么样_基于bootstrapTable的若依框架如何获取表格选中行的整行数据?...
导语 项目是基于若依框架写的,大部分的底层技术都是bootstrap. 最近在写一个项目的时候遇见一个需求,需要将子页面表格中选中的数据回传给父页面.为了减少网络请求,所以就准备直接使用子父页面传值. ...
- Request —— 获取请求行数据 获取请求头数据 获取请求体数据
1. request对象和response对象的原理 1. request和response对象是由服务器创建的.我们来使用它们 2. request对象是来获取请求消息,respon ...
- 【easyui】easyui datagrid加载成功之后选定并获取首行数据
//加载成功之后,选定并获取首行数据 onLoadSuccess:function(data){ alert("grid加载成功");var rows=$('test').data ...
- Request_获取请求行数据_方法介绍
request功能: 1. 获取请求消息数据 1. 获取请求行数据 * GET /day14/demo1?name=zhangsan HTTP/1.1 ...
- SQL查询最大值,返回整行数据
SQL查询最大值,返回整行数据 1.问题 部分数据如下,未完整展示.如何从 table_a 表中查询 p_postions 列的最大值对应的一行数据? 2.解答 方法1:先排序,再取第一条 SELEC ...
最新文章
- 浅谈人工智能应对数字化转型挑战的5个领域
- 「后端小伙伴来学前端了」Vue中利用全局事件总线实现组件之间通信
- android ble 实现自动连接,Android:自动重新连接BLE设备
- java form的时间格式_SpringMvc接收日期表单提交,自动转换成Date类型方法
- 51CTO,博客的显示有问题啊
- 全Sql语句实现SBO事务日志记录与查询
- SQL必知必会-组合查询
- ASP.NET页面生命周期概述(转载)
- Swift3 页面顶部实现拉伸效果代码
- 三维坐标绕轴坐标旋转公式
- 事务及其传播行为的通俗易懂的讲解
- 基于标准的多媒体视频对讲系统
- 从0到1CTFer成长之路-第二章-Web文件上传漏洞
- matlab 载波相位估计,光纤通信相干检测系统中波形处理与载波相位估计的研究...
- JSP空间上当受骗篇
- 微信企业号服务器搭建,微信企业号开发之如何建立连接
- Libuv源码解析 - uv_loop整个初始化模块
- 电脑新加内存条后 游戏崩溃 浏览器卡死 电脑蓝屏
- 【分治算法】大整数乘法
- 数值分析·学习 | 拉格朗日插值法matlab实现