【VB.net小品】盲人摸象---解决Oracle数据库连接连接问题
时 间:2014-05-07 14:48:30
作 者:煮江品茶 ID:10802 城市:武汉
摘 要:【VB.net小品】盲人摸象---解决Oracle数据库连接连接问题
正 文:
根据微软的说法,在.net framework中会将弃用System.Data.OracleClient,建议采用第三方客户端。好在Orcale很地道,开发有专门针对.net framework的ODP.net。于是便根据网上找到的一些资料,使用ODP.net做数据连接的客户端。具体的处理方法为:
1、在项目中添加引用Oracle.DataAccess.dll:该文件在Oracle的安装目录中的..\ODP.NET\bin\2.x\中。
2、在app.config中分别写本地和服务器的连接字符串。在connectionStrings节点中增加add节点,其中的代码分别为:
add name="OracleConnectionString0" connectionString="Data Source=xx.xxx.x.xxx/你的Oracle数据库名;User Id=你的用户名;Password=你的用户密码;"
add name="OracleConnectionString1" connectionString="Data Source=127.0.0.1/你的Oracle数据库名;User Id=你的用户名;Password=你的用户密码;"
3、在类文件中引用System.Data、Oracle.DataAccess.Client、Oracle.DataAccess.Types、System.Configuration。
4、在类文件中编写几个函数和子程序用于数据库处理即可。大体如下:
Imports System.Data
Imports oracle.DataAccess.ClientImports oracle.DataAccess.Types
Imports System.Configuration
Public Class ClassOracle
'Odp.net连接
Private Shared connstring As String '连接字符串
Public Sub New()
If String.IsNullOrEmpty(connstring) = True Then
Dim str1 As String = ConfigurationManager.ConnectionStrings("OracleConnectionString0").ConnectionString
Dim str2 As String = ConfigurationManager.ConnectionStrings("OracleConnectionString1").ConnectionString
Using conn As New oracleConnection(str1)
Try
conn.Open()
If conn.State = ConnectionState.Open Then
connstring = str1
Exit Sub
End If
Catch ex As Exception
End Try
End Using
Using conn As New oracleConnection(str2)
Try
conn.Open()
If conn.State = ConnectionState.Open Then
connstring = str2
End If
Catch ex As Exception
End Try
End Using
End If
End Sub
Public Function GetDataTable(ByVal ssql As String) As DataTable
'功能:返回数据表
Dim tb As New DataTable
If String.IsNullOrEmpty(connstring) = False Then
Using conn As New oracleConnection(connstring)
conn.Open()
Using cmd As New oracleCommand()
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = ssql
Using adp As New oracleDataAdapter(cmd)
Using ds As New DataSet
adp.Fill(ds)
tb = ds.Tables(0)
End Using
End Using
End Using
conn.Close()
End Using
Else
MessageBox.Show("连接服务器失败!")
End If
Return tb
End Function
Public Sub ExecuteNonQuery(ByVal ssql As String)
'功能:执行非Select命令
If String.IsNullOrEmpty(connstring) = False Then
Using conn As New oracleConnection(connstring)
conn.Open()
Using cmd As New oracleCommand
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = ssql
cmd.ExecuteNonQuery()
End Using
conn.Close()
End Using
Else
MessageBox.Show("连接服务器失败!")
End If
End Sub
Public Function ExecuteScalar(ByVal ssql As String) As Object
'功能:返回单一值
Dim obj As Object = Nothing
If String.IsNullOrEmpty(connstring) = False Then
Using conn As New oracleConnection(connstring)
conn.Open()
Using cmd As New oracleCommand
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = ssql
obj = cmd.ExecuteScalar()
End Using
conn.Close()
End Using
Else
MessageBox.Show("连接服务器失败!")
End If
Return obj
End Function
End Class
当然,你可以根据需要将这个类的功能写得更强大一些。有了这些代码,就可以对Oracle数据库进行增删改查的各种操作了,至于怎么设计窗体不是本文关注的内容,在此不赘述。
我在编写完成一个小的项目后,便开始设计安装项目。应该说.Net提供了很多项目部署的处理方案,比较简单的是设计安装项目。在安装项目中我们可以自定义安装的内容和过程。如何去完成一个安装项目在此也不赘述,只是告诉同志们,我搞出来了,并且在本机安装并运行成功。问题出现在向其他计算机安装的时候,首先在其他目标计算机上需要安装相同版本的.NET客户端。我的项目需要的是.NET Framewoke 4 Client Profile这个客户端,去下载一个安装即可。安装完成这个客户端后,接着安装我的项目,然后运行。问题来了,Oracle数据库连接失败!
问管理员,说是服务器和终端上的Oracle版本是10g,可能与我安装版本中的11g有冲突。到网上一查,还真是如此。于是就在网上找相关的处理方法,找了很多,终于找到了一篇《.net中使用ODP.net访问Oracle数据库(无客户端部署方法)》的文章,这个文章写的比较详细,大家可以去看看。按照这篇文章的方法我进行了处理,但是还是连不上。于是又找相关的资料,原来Oracle的版本号还有小号的差异,这个就比较麻烦了。于是我仔细想了一下,觉得可以不完全按照《.net中使用ODP.net访问Oracle数据库(无客户端部署方法)》文中的方法进行处理。这篇文章说到需要去下载Oracle的ODAC,然后从其中解压出几个dll文件,问题在于目标机上的Oracle版本并不总是能预先知道,这就需要下载很多不同版本的ODAC,这显然不是解决问题之道。
这篇文章最有价值的一句话被我敏锐的捕获到了,这句话是这样的:“在上面列出的DLL中,其中Oracle.DataAccess.dll和OraOps11w.dll才是ODP.net对应的文件,其余的DLL(oci.dll、oraociicus11.dll、orannzsbb11.dll、oraocci11.dll、ociw32.dll)均为OracleInstantClient对应的文件,ODP.net和InstantClient的版本必须一致,否则会发生错误,只要能保证版本正确,可以视需求另外下载OracleInstantClient(因为InstantClient分几个版本,BASIC,BASIC_LITE等),再将这几个DLL文件替换”
这段话,实际上已经排除了下载ODAC的必要。因为目标计算机上只存在两种情况:第一种是已经有客户端(比如有别的运用程序在前面已经安装了客户端),第二种情况是没有Oracle客户端。当存在客户端的时候,我们能在目标机上找到文章所述的几个dll文件,这几个文件编入安装项目即可。没有客户端的话,那也就不存在两种版本的冲突(注意这里的版本冲突与后台无关,只是前台目标计算机上的既有版本与将要安装的客户端中所带的版本之间的冲突),直接用开发用的计算机上的版本就可以了。
按照这个思路,和我所面临的情况(目标计算机上已经存在Oracle10g客户端),我在目标机上找到了所有的dll文件(注意有几个dll文件在主文件名末尾有版号标识中,所以文件名称会有11和10的差别,如oraociicus11.dll、orannzsbb11.dll),然后将这些文件拷贝到开发计算机上。然后按照以下步骤进行处理:
1、先在项目中删除原来的引用Oracle.DataAccess.dll。方法是:右击项目名称--属性--引用标签页,找到Oracle.DataAccess.dll,然后删除。
2、右击项目--添加引用--浏览--找到拷贝过来的文件夹中的Oracle.DataAccess.dll(它的版本是10g)。
3、在安装项目中打开文件系统视图,在目标计算机上的文件系统下,找到应用程序文件夹,然后右击--添加--文件,找到拷贝过来的文件夹,选中其中除oracle.DataAccess.dll外的所有文件,将它们全部添加到应用程序文件夹中。
4、生成安装项目。
所生成的安装项目在本机是无法运行的,因为本机的版本为11g,而安装的版本为10g。不过这没关系,拿到目标机上安装,然后运行之。一切OK!
以上所论不一定完全正确,只是提供同志们参考一下。 |
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access系统自带的日期选择器不...(11.08)
- 分享一下Access工程中的acw...(11.07)
- Access快速开发平台--让有权...(11.04)
- Access快速开发平台--审批选...(11.01)
- ACCESS两张表先各自排序,然后...(10.31)
- Access对子窗体数据进行批量+...(10.30)
- SqlServer中如何用SQL命...(10.29)
- Access报表中的分组功能用代码...(10.28)
- 用Access计算库存结余的一个方...(10.26)
- 最精简的组合框行来源数据快速输入(...(10.25)