欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-25 12:26:54
开发环境 宿主机:win10 + vs2015 + odp.net for vs2015 虚拟机:win7 + oracle 11g + 桥接 配置odp.net 首...

开发环境

宿主机: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,托管驱动程序,然后点击确定,打开添加连接窗口。

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

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

使用虚拟机搭建数据库的额外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表示连接成功