背景:
我们的C#应用程序生成并执行对多种类型数据库(Oracle,SQL Server,MySQL)的查询,但还要求将它们应用于专有文件格式。
我们最初将专有文件的内容转换为CSV,其中存在驱动程序 {Microsoft Text Driver(* .txt; * .csv)} 。但是,客户端要求不生成临时文件,并且所有内容都应该在内存中发生。
创建ODBC驱动程序直接查询文件似乎太时间要求。因此,我们正在考虑创建一个驱动程序(可能是ODBC),我们将在其中“嵌入”SQLITE ODBC驱动程序。在该驱动程序中,我们可以在“内存”数据库中加载CSV文件的内容,然后将查询转发到内部ODBC驱动程序。
我的问题:
由于
答案 0 :(得分:2)
客户端请求是奇数。总是会涉及文件,您正在从文件中读取。
如果他们想要他们的东西在内存中(再次是一个奇怪的客户)将CSV放到RAM磁盘上: http://members.fortunecity.com/ramdisk/RAMDisk/ramdriv001.htm
如果您关心性能和稳定性,构建和ODBC驱动器是一项非繁琐的工作。
答案 1 :(得分:1)
我认为您的解决方案非常耗时。您可以找到您尝试执行的现有解决方案。这里有几个替补。
为什么不试试Linq到text / csv文件?
两种解决方案都在内存中。
另一个想法是,你可以用xml而不是csv或text导出文件(当我必须在我的代码中处理时,我总是喜欢导出到xml)。比使用System.Xml或Linq to Xml执行操作。
答案 2 :(得分:1)
如果使用SQLite作为后端是可能的,我真的不明白为什么你不能使用ADO .NET提供程序到你的SQLite数据库,如System.Data.SQLite。
从您的评论中,我认为您正在使用ODBC ADO .NET提供程序进行所有数据库连接(System.Data.Odbc)。如果你需要保持相同的方案,那么自定义ODBC提供程序就是可行的方法(但那时它是普通的C本机开发,而且我相信很痛苦。)
另一种方法是向数据库添加第三个参数(前两个是SQL和连接字符串):要使用的ADO .NET提供程序(就像它是supposed to be done in configuration files一样,请参阅providerName
属性)。这样您就可以使用任何可用的ADO .NET提供程序。
然后,您可以将SQLite提供程序包装到您自己的自定义ADO .NET提供程序中,该提供程序可以包括SQLite DB的生成和填充。此解决方案的优点:纯托管.NET。
答案 3 :(得分:0)
如果您仅限制不创建临时文件,则可以尝试使用SQLite的内存模式。以下是它的连接字符串示例(source):
Data Source=:memory:;Version=3;New=True;
在我看来,这比建立成熟的提供商简单。$