我开发了几个使用 SQL Server 2005 Express 的桌面应用程序。
现在我需要在不需要 SQL Server 服务的环境中部署我的应用程序。
我需要一种机制,以便我只能使用该.MDF
文件或将文件转换为这种格式,这样我就可以在不运行 SQL Server 2005 服务的情况下部署我的应用程序。
我能做些什么?
请记住,数据库设计相当复杂。所以我试图避免重新创建 MS Access 文件。使用 SQLite 可能是一种选择。但我试图避免更改我的源代码。
我开发了几个使用 SQL Server 2005 Express 的桌面应用程序。
现在我需要在不需要 SQL Server 服务的环境中部署我的应用程序。
我需要一种机制,以便我只能使用该.MDF
文件或将文件转换为这种格式,这样我就可以在不运行 SQL Server 2005 服务的情况下部署我的应用程序。
我能做些什么?
请记住,数据库设计相当复杂。所以我试图避免重新创建 MS Access 文件。使用 SQLite 可能是一种选择。但我试图避免更改我的源代码。
虽然 Dai 提出了一些好的观点,但我认为您也可以在考虑 SQL Server 2012 的 LocalDB 时发现价值。这本质上是支持 SQL Express 和 SQL Server 的数据库引擎,但它作为客户端应用程序的子 exe 自动运行,而不是像 SQLExpress 和 SQLServer 这样的服务。
这篇文章比较了 LocalDB、SQL Compact、SQL Express 和 SQL Server:http: //blogs.msdn.com/b/jerrynixon/archive/2012/02/26/sql-express-v-localdb-v-sql-compact-版本.aspx
SQL Server Compact Edition could work if you can live with its limitations, such as a maximum database size of 4 GB. You would need to convert the .mdf file to the .sdf format used by SQL CE, and here is instructions on how to do that.
简而言之,你不能。
除非您的数据库是一组简单的表,只有最简单的关系和连接,并且您只执行简单的 CRUD 操作(您的帖子暗示不是这样),否则您无法拥有可在 RDBMS 引擎之间移植的数据库。
传统上,您会使用一些通用接口抽象出数据访问层,然后实现特定于 RDMBS 的查询和命令,例如
public interface IDatabase {
Account GetAccount(Int64 accountId);
Account[] GetAccounts(Int32 page, Int32 pageSize, out Int32 totalRecords);
etc...
}
public class MSSqlServerDatabase : IDatabase {
}
public class MySqlServerDatabase : IDatabase {
}
但是,您可能最好转向 SQLite,因为它是完全可移植的并且可以在任何地方工作。它也不涉及安装任何服务。硬着头皮 :)