十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
宿主机:Win10 + VS2015 + ODP.Net for VS2015虚拟机:Win7 + Oracle 11g + 桥接
成都创新互联专注于中大型企业的成都网站设计、成都网站建设和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户上千家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注成都品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!
配置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命令是否有错误。
64位的oracle是在本机上吗?
如果是的,那么用类似下面的方法就可以。
使用InstantClient,PL/SQL Developer连接Oracle(可以在32位机器上使用、也可以在64位机器上使用):
•1. 下载32位Oracle InstantClient,并展开到某目录,例如C:\instantclient-basic-nt-11.2.0.2.0;
•2. 将系统的tnsnames.ora拷贝到该目录下;
•3. 在PLSQL Developer中设置Oracle_Home和OCI Library:
ToolsPreferencesOracleConnection:
Oracle_Home: C:\instantclient-basic-nt-11.2.0.2.0
OCI Library: C:\instantclient-basic-nt-11.2.0.2.0\oci.dll
•4. 在PLSQL Developer目录下新建如下bat文件,替换其快捷方式,启动PLSQL Developer:
@echo off
set path=C:\instantclient-basic-nt-11.2.0.2.0
set ORACLE_HOME=C:\instantclient-basic-nt-11.2.0.2.0
set TNS_ADMIN=C:\instantclient-basic-nt-11.2.0.2.0
set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
start plsqldev.exe
vs2022如何连接oracle的解决方法如下:
本机环境:64位win7,安装了64位的oracle桌面类
服务器环境:64位windows server 2008,64位oracle服务器端
问题:本机用sql developer连数据库没有问题,winform程序连接也没有问题,但是web程序连接oracle失败,报错:“尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。“
解决过程:在网上查找原因,说是因为VS的webDe.webServer.exe 是一个32位的进程,所以连不上64位数据库,解决方法提了很多,包括把项目的属性里的生成选项里的目标平台:改为x86,web项里的服务器改成iis不使用vs自带的web deleloper ment 服务,修改path环境变量等,但是都没管用。
最终的解决办法:安装32位oracle客户端(win32_11gR2_client.zip),但是这样一来winform程序又连不上数据库了,得把winform程序的项目属性里生成选项的目标平台改成x86,这样就都行了。
本地机器tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = fuqiang)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
SERVICEORCL=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
服务器tnsnames.ora
SERVICEORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 服务器名称)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
VS中连接代码:
C# code
OracleConnection oracleConnection = new OracleConnection("Data Source=;User ID=system;Password=manager;Unicode=True");
这样写连接字符串,可以连接到本地orcl这个实例,没有问题。但是想连接到服务器上的orcl实例,该如何写连接字符串,其它地方都一样吧,只是Data Source要怎么写?
------回答---------
------其他回答(90分)---------
本地用Net Configuration Assistant 建个net服务,连接倒服务器,net服务名为ORCL_SVR,确保连接正确,然后Data Source=ORCL_SVR即可。
------其他回答(5分)---------
把你QQ告诉我,我连过去给你看一下。
------其他回答(5分)---------
引用 9 楼 sorry0481 的回复:
又搞了一会,发现问题了,可是不知道怎么解决,服务器使用Net Configuration Assistant 测试连接自己,没有问题。客户端全用Net Configuration Assistant 测试连接服务器也没有问题。可见已经配置好了,但是在运行Microsoft Visual Studio 2008代码时,连接字符串报错:“ORA-12154: TNS: 无法解析指定的连接标识符”,看了下断点,错误是这个:
ServerVersion “((System.Data.Common.DbConnection)(oracleConnection)).ServerVersion”引发了“System.InvalidOperationException”类型的异常 string {System.InvalidOperationException}
分析了下,应该是版本的问题,可是我只安了一个11G,没有安其它版本,结果想到,是不是安了Oracle Developer Tools for Visual Studio .NET这个引起的??哪位仁兄碰到过类似问题??该怎么解决???
你确定DB连上了?tnsnames 跟你的config档设定是否一致?我也遇到过,血的教训啊。。。
------回答---------
------其他回答(90分)---------
本地用Net Configuration Assistant 建个net服务,连接倒服务器,net服务名为ORCL_SVR,确保连接正确,然后Data Source=ORCL_SVR即可。
------其他回答(5分)---------
把你QQ告诉我,我连过去给你看一下。
------其他回答(5分)---------
引用 9 楼 sorry0481 的回复:
又搞了一会,发现问题了,可是不知道怎么解决,服务器使用Net Configuration Assistant 测试连接自己,没有问题。客户端全用Net Configuration Assistant 测试连接服务器也没有问题。可见已经配置好了,但是在运行Microsoft Visual Studio 2008代码时,连接字符串报错:“ORA-12154: TNS: 无法解析指定的连接标识符”,看了下断点,错误是这个:
ServerVersion “((System.Data.Common.DbConnection)(oracleConnection)).ServerVersion”引发了“System.InvalidOperationException”类型的异常 string {System.InvalidOperationException}
分析了下,应该是版本的问题,可是我只安了一个11G,没有安其它版本,结果想到,是不是安了Oracle Developer Tools for Visual Studio .NET这个引起的??哪位仁兄碰到过类似问题??该怎么解决???
你确定DB连上了?tnsnames 跟你的config档设定是否一致?我也遇到过,血的教训啊
远程连接字符串应该是做这个DB的人设置好,然后告诉你的.
比如我做了一个库叫TEST,并且这个库的IP是192.168.1.100,
那么我用ORACLE自带的NET CONFIGURATION ASSISTANT建立一个NET SEVERS,一路默认设置,那么连接字符串就是TEST@192.168.1.100,当然,如果我愿意,我可以把连接字符串改成NEWTEST,别人是不会知道的
1、2、3版本是不同的库环境。必须服务器装下3.5的框架,然后iis设置下asp.net版本就可以了。
如果你那边没这类主机,我这边有做的,可百度HI我。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
namespace testConnectionOracle
{
class Program
{
static void Main(string[] args)
{
string connectionString;
string queryString;
connectionString = "Data Source=60.217.72.134/orcl;User ID=**;PassWord=**";
queryString = "SELECT * FROM test";
OracleConnection myConnection = new OracleConnection(connectionString);
OracleCommand myORACCommand = myConnection.CreateCommand();
myORACCommand.CommandText = queryString;
myConnection.Open();
OracleDataReader myDataReader = myORACCommand.ExecuteReader();
myDataReader.Read();
Console.WriteLine("id: " + myDataReader["id"]);
myDataReader.Close();
myConnection.Close();
}
}