VS2015连接Oracle数据库的详细步骤

开发环境

宿主机:win10 + vs2015 + odp.net for vs2015 虚拟机:win7 + oracle 11g + 桥接

配置odp.net

首先下载 oracle developer tools for visual studio 2015 ,下载此文件需要注册oracle社区账号并接受相关的协议,此文件提供了以下组件:

oracle developer tools for visual studio 12.1.0.2.4
oracle data provider for .net 4 12.1.0.2.0
oracle providers for asp.net 4 12.1.0.2.0

下载完成后运行msi安装程序进行安装,安装完成后会自动注册vs2015的相关插件,重新启动vs2015后将会看到oracle的相关命令,比如sql *plus支持等。同时添加数据库时也能看到相应的选项。

odp.net支持所有oracle版本,因此下载时只需要注意vs的版本即可。

配置tnsnames.ora

odp.net默认使用安装目录下的tnsnames.ora,若安装目录在program files下,可能会遇到无权限等问题,此时使用管理员权限打开命令行,切换到对应目录并使用notepad编辑。

复制服务器端的tnsnames.ora文件内容,或者自己手动编辑,格式如下:

<数据源别名> =
 (description =
  (address = (protocol = tcp)(host = <主机名或ip>)(port = <端口号>))
  (connect_data =
   (server = dedicated)
   (service_name = <数据库服务名>)
  )
 )

添加数据库

打开工具-连接到数据库,数据源修改为oracle数据库下的odp.net,托管驱动程序,然后点击确定,打开添加连接窗口。

填写用户名,密码并选择数据源,然后测试连接,成功的话说明已经连通,点击确定即可。

使用虚拟机搭建数据库的额外tips 根据某网友分析,oracle的监听器在通过1521端口连接后,会开启另外一个新的随机端口进行数据通讯,因此使用nat方式虚拟网卡可能会导致连接失败。这种情况下,请使用桥接方式虚拟网卡,并在net manager中将loaclhost修改为虚拟机当前的ip。重启监听服务后,再试。

连接数据库并使用

连接数据库

dim oradb as string = "user id=system;password=123456;data source=lol"
dim conn as new oracleconnection(oradb)
conn.open()
dim sql as string = "create table xxx"
dim sqlcom as new oraclecommand
sqlcom.commandtext = sql
sqlcom.connection = conn
sqlcom.executenonquery()

查询数据

成功配置数据源之后,只需要向界面上拖动datagridview,并进行相关配置,选择自己需要的表即可。

插入图片的正确姿势

图片作为二进制数据无法直接拼凑出sql命令,我们需要使用oraclecommand自带的parameters功能。在sql命令中用:photo来代表一个参量,然后使用

sqlcom.parameters.add("photo", oracledbtype.blob, imgdata.length)

来分别指定这个参量的类型和所占空间大小

最后使用

sqlcom.parameters(0).value = imgdata

来指定这个参量的值。

整个插入图片过程的代码如下:

dim conn as new oracleconnection(oradb)
dim imgdata(0) as byte
dim ms as new system.io.memorystream
picturebox1.backgroundimage.save(ms, picturebox1.backgroundimage.rawformat)
redim imgdata(ms.length - 1)
ms.read(imgdata, 0, ms.length)
ms.close()
conn.open()
dim sql as string = "insert into hero values" & "(" & textbox1.text & ":photo" & ")"
dim sqlcom as new oraclecommand
sqlcom.commandtext = sql
sqlcom.connection = conn
sqlcom.parameters.add("photo", oracledbtype.blob, imgdata.length)
sqlcom.parameters(0).value = imgdata
sqlcom.executenonquery()

常见错误

column not allowed here

数据类型不符,检查对应项目数据类型是否正确。

missing comma
命令格式不对,检查一下自己的sql命令是否有错误,特别是在有字符串的时候,需要使用””来代表一个字符串中的”。

identifier is too long
标识符过长(不得超过30字符),不是非常明白原因,不过我取消掉insert命令中指定位置的部分之后,这个错误消失了。

missing into keyword
缺少into关键字(手滑打成了inte),检查一下自己的sql命令是否有错误。

cannot insert null into (“system”.”hero”.”herocategoryid”)
这些项都指定了非0值,故不能不赋值,为对应项目赋值即可。

下面是其它网友的补充:

1.下载oracle developer tools for visual studio 2015 ,网址如下。

 安装好后参照oracle的安装目录下的 tnsnames.ora文件的最后一段修改oracle developer tools for visual studio 2015安装目录下的 tnsnames.ora文件的最后一 段(直接复制)我的如下orcl =
(description =
(address = (protocol = tcp)(host = localhost)(port = 1521))
(connect_data =
(server = dedicated)
(service_name = orcl)
) f:\app\sky\product\11.2.0\dbhome_1\network\admin

3.打开vs会发现工具选项里面多了sqlplus等roacle的内容,在项目的引用上点击右键添加引用-扩展-选择oracle.managedataaccess
managedataaccess笔以前的dataaccess更好用,不用考虑64位32位的问题
4.通过如下代码测试是否连接成功

using system;
using system.collections.generic;
using system.linq;
using system.text;
using oracle.manageddataaccess.client;//dll引用


namespace test
{
  class program
  {
    static void main(string[] args)
    {
      string connstring = "data source=orcl;user id=zzw;password=123456";
      oracleconnection conn = new oracleconnection();
      conn.connectionstring = connstring;
      conn.open();
      console.writeline("connection state:" + conn.state);
      conn.close();
      console.readline();
    }
  }
}

 如果控制台输出信息为open表示连接成功

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐