3

背景:

我们的 C# 应用程序生成并执行对几种类型的数据库(Oracle、SQL Server、MySQL)的查询,但也提出了将它们应用于专有文件格式的要求。

  1. 到目前为止使用的命名空间是 System.Data.Common。
  2. 我们需要应用的查询非常重要(嵌套的 SELECT、FROM 中的别名、子字符串方法和字符串连接)

我们最初将专有文件的内容转换为 CSV,为此存在 Driver {Microsoft Text Driver (*.txt; *.csv)}。但是,客户端要求不生成临时文件,并且一切都应该发生在内存中。

创建一个 ODBC 驱动程序来直接查询文件似乎太费时了。因此,我们正在考虑创建一个驱动程序(可能是 ODBC),我们将在其中“嵌入”SQLITE ODBC 驱动程序。在该驱动程序中,我们可以将 CSV 文件的内容加载到“内存”数据库中,然后将查询转发到内部 ODBC 驱动程序。

我的问题:

  1. 这个解决方案看起来可行吗?
  2. 为了从头开始创建 ODBC 驱动程序,我们应该从哪里开始?

谢谢

4

4 回答 4

2

客户端请求很奇怪。总会有文件涉及,您正在从文件中读取。

如果他们想要他们的东西在内存中(又是一个奇怪的客户)把 CSV 放到 RAM 磁盘上:http: //members.fortunecity.com/ramdisk/RAMDisk/ramdriv001.htm

如果您关心性能和稳定性,构建和 ODBC 驱动器是一项非常重要的工作。

于 2009-10-07T15:53:01.107 回答
1

我认为您的解决方案很耗时。您可以为您正在尝试做的事情找到现有的解决方案。这里有几个替代品。

为什么不试试 Linq to text/csv 文件?

两种解决方案都在内存中。

另一个想法是,您可以将文件导出为 xml 而不是 csv 或文本(当我必须在我的代码中处理时,我总是更喜欢导出到 xml)。比您使用 System.Xml 或 Linq to Xml 来执行操作。

于 2009-10-07T11:34:00.443 回答
1

如果使用 SQLite 作为后端是可能的,我真的不明白为什么你不能像System.Data.SQLite这样的 SQLite 数据库使用 ADO .NET 提供程序。


根据您的评论,我认为您实际上使用 ODBC ADO .NET 提供程序进行所有数据库连接(System.Data.Odbc)。如果您需要保持相同的方案,那么自定义 ODBC 提供程序是可行的方法(但它是纯 C 本机开发,我相信相当痛苦)。

另一种方法是向您的数据库添加第三个参数(前两个是 SQL 和连接字符串):要使用的 ADO .NET 提供程序(就像它应该在配置文件中完成一样,请参阅providerName属性)。这样您就可以使用任何可用的 ADO .NET 提供程序。

然后,您可以将 SQLite 提供程序包装到您自己的自定义 ADO .NET 提供程序中,这可能包括 SQLite DB 的生成和填充。此解决方案的优势:纯托管 .NET。

于 2009-10-07T12:35:00.317 回答
0

如果您只限于不创建临时文件,您可以尝试使用 SQLite 的内存模式。这是它的连接字符串示例(source):

Data Source=:memory:;Version=3;New=True;

在我看来,这比构建成熟的提供者要简单。$

于 2009-10-07T11:37:46.820 回答