如何将共享数据库从Access迁移到SQL Express

时间:2013-05-30 11:47:10

标签: sql sql-server database ms-access

我多年来一直在通过DAO使用MS Access数据库,但我觉得我应该采用更新的技术。

我的主应用程序在最终用户PC(无服务器)上运行,并使用即时创建和更新的共享数据库。首次运行应用程序时,它会检测到数据库不存在并创建一个新的空数据库。

允许运行该应用程序的任何本地用户在此共享数据库中添加或更新记录。我们还有一些其他共享数据库,包含模板,区域信息等,但这些数据库不会直接由应用程序更新。

应用程序的更新会不时发布,每个新更新都会检查主数据库版本,并在必要时执行代码以使数据库达到最新规范。这可能涉及创建或删除表和/或列。模板数据库的新副本也包含在更新中。

我们的用户不需要具备计算机知识,不需要运行除应用程序提供的设施之外的任何类型的数据库管理软件。

这一切都非常适合DAO / Access,但我很难找到如何使用SQL Express。这些数据库似乎在用户特定的位置上存在,数据库的创建和更新似乎最多只能通过程序代码来实现。

我遇到了一些看起来很有希望的引用“Xcopy部署”,但似乎有一些“用户实例”的引用听起来像是一些不共享的东西。我很感激任何做过它的人的建议。

3 个答案:

答案 0 :(得分:2)

听起来我没有完全理解 Access数据库引擎(ACE / Jet)和SQL Server之间的根本区别:

当您的用户启动Access应用程序时,它会连接到其计算机上已安装的Access数据库引擎。他们的ACE / Jet副本打开网络文件夹中的共享数据库文件(.accdb或.mdb)。 ACE / Jet的各种实例共同管理并发更新,记录锁定等。这有时被称为“对等”或“共享文件”数据库体系结构。

对于使用SQL Server后端的应用程序,每个用户计算机上的应用程序副本通过网络连接到相同的 SQL Server实例(这就是为什么它被称为“SQL < em>服务器“),并且该SQL Server实例代表所有客户端操作数据库(存储在其本地硬盘上)。这称为“客户端 - 服务器”或“基于服务器”的数据库体系结构。

请注意,对于多用户数据库,您在客户端计算机上安装SQL 服务器,您只需安装SQL Server客户端组件(OleDb和ODBC驱动程序) 。 SQL Server本身只安装在一个地方:将充当SQL ... Server的机器。

re:“数据库创建和更新似乎最好只通过程序代码来做” - 完全没有,它只是“不同”。再次,您将所有命令传递给SQL Server,负责创建实际的数据库文件。例如,一旦你连接到SQL Server,如果你告诉它

CREATE DATABASE NewDatabase

它将在用于存储此类内容的任何本地文件夹中创建数据库文件(NewDatabase.mdfNewDatabase_log.LDF),这通常类似于

C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.SQLEXPRESS \ MSSQL \ DATA

在服务器上。

请注意,您的应用 从不 直接访问这些文件。事实上,它几乎肯定不能这样做,实际上你的应用程序甚至不会关注那些文件所在的位置或它们被称为什么。您的应用只需与SQL Server通信(例如ServerName\SQLEXPRESS),服务器就会处理详细信息。

答案 1 :(得分:1)

只是为了更新我的进度。灵感来自这里的建议和关于代码项目的这篇文章: http://www.codeproject.com/Articles/63147/Handling-database-connections-more-easily, 我已经为ADO.NET方法创建了一个包装器,它看起来与我熟悉的DAO类似。

我有一个类,我可以像DAO数据库一样使用它。它包含可以接受SQL参数的重载,如ExecuteReader,ExecuteNonQuery等ADO方法。这允许我直接用读取器替换DAO Recordsets,用ExecuteReader替换OpenRecordset,用ExecuteNonQuery替换Execute。

每个方法从其父类实例获取并释放连接。这些依次根据事务状态(如果有的话)打开或关闭底层连接。因此,对于作为事务一部分的方法调用,连接保持打开状态,但对于单个调用立即关闭。

这大大简化了程序的迁移,因为大部分的驴工作都可以通过简单的“查找和替换”来完成。剩下的问题相对容易找到和整理出来。

再次感谢Gord和Maxwell的建议。

答案 2 :(得分:0)

这个答案太长了不能......但是转到微软页面,他们会解释如何制作它:http://office.microsoft.com/en-us/access-help/move-access-data-to-a-sql-server-database-by-using-the-upsizing-wizard-HA010275537.aspx

我希望这能帮到你!!