我正在尝试开发一个使用数据库的简单C#应用程序。我目前正在使用 MS Server 2008 ,但我发现了一个可移植性问题,因为在不同的计算机上运行该应用程序需要安装MS Server。此外,我的数据库使用存储过程。
我可以使用哪些其他数据库类型来克服这个问题(n.b.它必须使用存储过程)?
如果我要使用MS Server 2008,假设它安装在每台PC上,我如何复制我的.mdf文件才能访问? (即在应用程序加载时安装它?)
更新
从this website,我找到了以下连接字符串:
在连接到本地SQL Server Express实例时附加数据库文件...
Server=.\SQLExpress;AttachDbFilename=c:\asd\qwe\mydbfile.mdf;Database=dbname; Trusted_Connection=Yes;
我认为这会从我的文件夹中复制.mdf文件。 因此,我使用以下连接字符串,但没有成功......
Server=.\SQLExpress;AttachDbFilename=...... database path.... ;Database=TrieDB.mdf; Trusted_Connection=Yes;
Directory lookup for the file "... database path... " failed with the operating system error 5(Access is denied.).
Cannot attach the file '... database path...' as database 'TrieDB.mdf'
答案 0 :(得分:1)
大多数“认证”数据库引擎要求您实际安装引擎 大多数“认证”的数据库引擎都支持使用存储过程。
为了在更多的机器上安装.mdf文件,您可以简单地复制它,然后使用sql management studio将文件附加到引擎,但如果您计划在许多机器上分发您的应用程序,这不是一个理想的解决方案地方,理想的解决方案是创建一个安装包并修复它从安装中自动完成并在卸载时撤消。
imho:你坚持使用de-cenralralized解决方案的存储过程 - 注意这是一个相当罕见的策略 - 它有一个错误路径的气味.. 但除非你提供更多信息,否则我无法确定。
答案 1 :(得分:1)
实际上有两种常规设计可以像你所描述的那样做。要么具有应用程序的所有副本(和/或多个应用程序)访问的集中式数据库,要么创建与数据库一起完成的安装包(通常只能由单个应用程序访问)。
就个人而言,如果您不想或不能使用集中式数据库解决方案,我建议您更改有关存储过程的理念并查看SQL Server Compact。我发现this article讨论了SQL Server Compact没有sprocs的原因,我认为这对你很有用,即使你决定确实需要它们。
也就是说,如果您需要在应用中安装数据库,可以在Visual Studio中创建setup package,也可以使用WiX进行查看。
答案 2 :(得分:0)
您可以分离数据库,复制并附加目标数据库上的mdf文件。