c# - 是否有一种可移植的方式来表示任意数据库表(结构仅在运行时已知),类似于 DataSet/DataTable 的方式?

标签 c# .net database data-structures portable-class-library

我有一个用于查询用户定义数据库的 API 的包装库。它目前使用 DataSet、DataTable、DataRow 等运行良好。我想将其转换为可移植库以便在其他平台上使用,但这些类不是可移植子集的一部分。

是否有任何与这些类远程等效的东西?我的库对 DataSet 所做的主要工作是将数据传输到域层,该域层填充业务对象。

我需要的是一种将数据库表的任意表示形式从我的库传递到调用我的库的程序的方法,该程序在某种形式的可移植库上工作,理想情况下是所有子集(不需要 Xbox),但任何东西都更好我现在一无所有。

背景

这是我正在努力解决的数据流

User Defined Database <==> My Library <==> User C# Code

可用的 API 还很粗糙。我的库使查询变得更加容易,但由于我在设计时对结构一无所知,因此我解析从 API 返回的数据并将其放入 DataSet 对象中。最终用户解析这些数据集以填充他们的域对象。我正在寻找一种在没有数据集的情况下为可移植库执行此操作的方法。

我的库的使用示例,这也是使用的DataSet/Table/Row功能的范围:

var myLib = new MyLib(parms);
Find request = myLib.MakeFind();
request.AddSearch("userID", 12);
DataSet response = request.Execute()

var user = new User();
user.ID = int.Parse(response.Tables[0].Rows[0]["userID"].ToString());
user.FirstName = response.Tables[0].Rows[0]["FIRST_NAME"].ToString();
user.LastName = response.Tables[0].Rows[0]["LAST_NAME"].ToString();

foreach (DataRow relatedRow in dr.GetChildRows("Logs"))
{
    var lg = new LogEntry() { ID = int.ParserelatedRow["ID"].ToString()), Text = relatedRow["Text"].ToString(); };
    user.Logs.Add(lg);
}

最佳答案

我建议使用基本序列化(XML/JSON)——它使数据可移植,并且几乎可以在您能想到的任何平台上使用。 XML 可能比 JSON 稍微更常见,但您始终可以采用 WebAPI 所做的方法 - 让调用者决定他们想要两者中的哪一个,如果他们不选择一个,则默认为 XML。

假设您没有做任何太疯狂的事情,那么在 .NET 中将数据序列化/反序列化为 XML 或 JSON 是微不足道的。在其他平台中反序列化应该很简单,但是您可以通过快速网络搜索来挖掘任何编程环境的示例。

关于c# - 是否有一种可移植的方式来表示任意数据库表(结构仅在运行时已知),类似于 DataSet/DataTable 的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17156608/

相关文章:

php - 选择更好的选项 1) 使用文件或 2) 数据直接存入数据库

c# - ReSharper 的商业案例

c# - 如何加载图像,然后等待几秒钟,然后播放 mp3 声音?

.net - 我可以使用 Microsoft Parallel Extensions to .NET Framework 3.5,2008 年 6 月社区技术预览版开发生产代码吗?

java - .NET 等效的 Java 工具和库

mysql - INNER JOIN 不限制结果

c# - 在 Asp.net MVC4 中静默打印 PDF 文件

c# - 我如何在Unity中序列化c#的属性

C# SQL 输出代码问题

java - 错误: If a primary key is annotated with autoGenerate,其类型必须是int、Integer、long或Long