CSDN朋友问题回复:
有个ACCESS数据库文件在本机,机器上的OFFICE套件已经卸载,ACCESS没有用户名和密码,如何用MSSQLServer来查询和修改其文件内容?
比如ACCESS物理文件是存放在D盘根目录下的home.mdb,其中包含表'帐户'
一ACCESS数据源查询
方式一:链接服务器
--1 新建链接服务器
EXEC sp_addlinkedserver 'clA', --名称自己起
'ACCESS', --数据源产品为access
'Microsoft.Jet.OLEDB.4.0', --数据源OLEDB
'D:/home.mdb' --access数据文件物理路径
--命令已成功完成。
--2.1 利用OPENQUERY函数查询ACCESS数据库
SELECT top 3 *
FROM OPENQUERY(clA, 'SELECT * FROM 帐户')
--result:
AccountID AccountNumber AccountName AccountTypeID
----------- -------------------------------------------------- -------------------------------------------------- -------------
1 1001 房租费 1
2 1002 交通费 1
3 1003 电费 1
(3 行受影响)
--2.2 直接查询
select * from clA...帐户
--result:
--结果与.1查询结果一致。
方式二:使用OLE DB 连接并访问远程数据的一次性的临时方法
--更改数据库高级配置选项
/*
sp_configure 'show advanced options',1
reconfigure
sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
*/
--查询ACCESS数据库,table为帐户.
SELECT top 3 *
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'D:/home.mdb';'admin';'',帐户)
GO
--result:
--结果与.1查询结果一致。
方式三:使用OPENDATASOURCE 连接并访问远程数据的一次性的临时方法
select top 3 *
from OPENDATASOURCE ( 'Microsoft.Jet.OLEDB.4.0'
,'Data Source="D:/home.mdb";User ID=Admin;Password=;')...帐户
--result:
--结果与.1查询结果一致。
总结一:对于ACCESS本地数据源的读取,可以用以上三种方式的任意一种。当mdb存在用户名和密码时,
方式一需要添加远程链接登录名,比如执行如下脚本exec sp_addlinkedsrvlogin 'clA','false',NULL,'用户名','用户密码';
方式二和方式三则分别在'admin';''和User ID=Admin;Password=中输入相应的密码,这里默认用户是admin。
二ACCESS数据源修改
/*
对于数据源的i/u/d类型操作,建议使用远程链接服务器的方式进行(即.1的方式)。
*/
--举例如下:
update clA...帐户set AccountNumber=10010 where AccountNumber=1001 and AccountID = 1
--result:
(1 行受影响)
三发散知识点:
Q:为何对于非MSSQL数据源的i/u/d操作,通常都建议在远程链接服务器方式下进行呢?
A:远程链接服务器是指通过sp_addlinkedserver搭建数据源链接进行访问的一种方式,通常用于长期频繁的数据源的s/i/u/d操作,
相当于直接进行表操作。对于OPENROWSET和OPENDATASOURCE方式通常是进行一次性的应用操作,除了安全性等原因,它们无法进行
安全管理以及查询目录信息的功能。
Q:如果ACCESS不在本机,还可以用上述方式查询吗?
A:变化一下思路,将ACCESS在异地的文件转换为本机。比如home.mdb文件是在.168.1.1机器上,则我们可以使用
//192.168.1.1//共享文件夹/home.mdb形式,当然前提是设置了共享文件夹;另外还可以尝试打开默认共享,比如
//192.168.1.1/D$/home.mdb。当然任何想法和思路都要以适合应用为前提,简单便捷安全为前提。这里仅提供思路,
不表示该方式一定可以实现,因为涉及面不仅仅是数据库方面,还涉及到网络共享等。