惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
U
Unit 42
A
About on SuperTechFans
Vercel News
Vercel News
B
Blog
Martin Fowler
Martin Fowler
MyScale Blog
MyScale Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
腾讯CDC
D
Docker
V
Visual Studio Blog
博客园 - 叶小钗
The Cloudflare Blog
Jina AI
Jina AI
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏

博客园 - ZH.net

从SQLSERVER向ORACLE8迁移的技术实现方案 Part V [转] 从SQLSERVER向ORACLE8迁移的技术实现方案 PartIV [转] 从SQLSERVER向ORACLE8迁移的技术实现方案 PartIII [转] 从SQL SERVER向ORACLE的迁移方案[转] PartII Sql Server 转入 Oracle part I (转自网络) 在 .NET 中使用 Oracle 数据库事务 作者:Jason Price 转自oracle.com Oracle Trigger(转自网络) Oracle的分页以及sequence 一些正则表达式 - ZH.net - 博客园 接昨日,将上传至oracle的excel文件下载下来 将文件(word,excel等)存入oracle的一个字段 .net studio 2005操作dbf文件 Web利用Gloabl.asax实现多线程任务 maintain AD(将一个账号移动到另一个群组) 一個Check AD的类。from MSDN 一些JS ViewState的一些学习笔记 发mail时smtp服务器设置的一个问题 datagrid前加checkbox
在vb.net中通过ODBC从Oracle 9i向Access倒数据
ZH.net · 2006-08-24 · via 博客园 - ZH.net

闲话少说,进入正题:
逻辑:
access支持
select * into tbl from[odbc:dsn=a;uid=uid;pwd=pwd].tbl这种方式的数据导入
所以我们只需要在要运行的客户端上建立一个连接数据源Oracle的ODBC数据源便可,Access不需要做任何设置
由于用户并不一定知道怎么建立ODBC数据源,而且dsn需要有oracle的network/admin下的tnsnames.ora(这个用过oracle的都知道是啥玩意)来指向oracle服务器,但客户端不一定会装oracle
所以程序里除了开头说的那个sql之外,另外还需解决2个问题:帮助客户端建立ODBC数据源,并在帮助这个ODBC数据源在没有tnsnames.ora文件的情况下连接到数据库.
基本问题就是这些,下面一一道来
建立ODBC数据源需要引用
Imports DAO
然后通过DAO.DBEngine建立DSN:
    Private Sub CreateDSN(ByVal sDSN As String)
        Dim sDriver As String
        sDriver = "Microsoft ODBC for Oracle"
        Dim sAttributes As String = "Server=ORA9" 
        Dim DBEngine As New DAO.DBEngine
        DBEngine.RegisterDatabase(sDSN, sDriver, True, sAttributes)

    End Sub

建立好之后不放心的可以在测试机的数据管理那里测试一下有没有建立好,关键是Server那里要写对,再就是driver那里因为我是用ora9的所以用"Oracle in OraHome92"这个也可以.但是要考虑客户端那边并不一定有这个driver.

下面是连接DSN并抓数据了,其实关键就是这一句:
select * into tbl from[odbc:dsn=a;uid=uid;pwd=pwd].tbl
在同事的帮助下,我在codeproject.com上找到了怎么将tnsnames.ora也写在连接字符串里..很简单..就是把这个文件里连接目标数据库的那一段加进[odbc:..]这里面,最后就写成这样:
 SELECT * INTO tbl FROM [ODBC;DSN=ExportWork;uid=UID;pwd=PWD;CONNECTSTRING=" & System.Configuration.ConfigurationSettings.AppSettings.Get("tnsnames") & ";].tbl
这个tnsnames的字符串写在app.config里
<add key="tnsnames" value="(DESCRIPTION=(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.65)(PORT = 1521))(CONNECT_DATA =(SERVICE_NAME = ora9)))"></add>

这样就基本ok了
最后说几个注意的地方:
第一:这个sql需要用ODBC来执行,为什么我就不用说了吧,至于为什么我要提这个,因为我就曾经用ole db来执行这个sql,然后错了都不知道为什么....;
第二:在执行这个sql的时候,如果access里已经有了相应的表,会出错.所以在执行这个sql之前先要drop掉那个表...但是access不支持if exists这种玩意,美办法之下我只好try catch了..
第三:oracle里有BLOB这种格式,会出错...至于怎么解决,我倒是看到有解决方案,但是没想好怎么加到这段程序里.也问过邹建,他也说他一时也想不出有啥更好的办法..大家有什么好建议记得吱一声哈..

如上.就这样了