VS2015链接Oracle数据库(转)

原文地址:https://xuanwo.org/2016/01/03/vs-oracle-11g

开发环境

宿主机:Win10 + VS2015 + ODP.Net for VS2015
虚拟机:Win7 + Oracle 11g + 桥接html

配置ODP.Net

首先下载 Oracle Developer Tools for Visual Studio 2015 ,下载此文件须要注册Oracle社区帐号并接受相关的协议,此文件提供了如下组件:sql

  • 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编辑。oracle

复制服务器端的tnsnames.ora文件内容,或者本身手动编辑,格式以下:ide

1
2
3
4
5
6
7
8
<数据源别名> =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <主机名或IP>)(PORT = <端口号>))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <数据库服务名>)
)
)

添加数据库

打开工具-链接到数据库,数据源修改成Oracle数据库下的ODP.NET,托管驱动程序,而后点击肯定,打开添加链接窗口。
添加链接
填写用户名,密码并选择数据源,而后测试链接,成功的话说明已经连通,点击肯定便可。工具

使用虚拟机搭建数据库的额外Tips
根据某网友分析,Oracle的监听器在经过1521端口链接后,会开启另一个新的随机端口进行数据通信,所以使用NAT方式虚拟网卡可能会致使链接失败。这种状况下,请使用桥接方式虚拟网卡,并在net manager中将loaclhost修改成虚拟机当前的IP。重启监听服务后,再试。测试

链接数据库并使用

链接数据库

1
2
3
4
5
6
7
8
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,并进行相关配置,选择本身须要的表便可。ui

插入图片的正确姿式

图片做为二进制数据没法直接拼凑出SQL命令,咱们须要使用OracleCommand自带的Parameters功能。在SQL命令中用:photo来表明一个参量,而后使用spa

1
sqlCom.Parameters.Add("photo", OracleDbType.Blob, imgData.Length)

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

最后使用

1
sqlCom.Parameters(0).Value = imgData

来指定这个参量的值。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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值,故不能不赋值,为对应项目赋值便可。

相关文章
相关标签/搜索