宿主機:Win10 + VS2015 + ODP.Net for VS2015虛擬機:Win7 + Oracle 11g + 橋接
成都創(chuàng)新互聯(lián)專注于中大型企業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶上千家,服務(wù)滿意度達97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進的路上,與客戶一起成長!
配置ODP.Net
首先下載 Oracle Developer Tools for Visual Studio 2015 ,下載此文件需要注冊O(shè)racle社區(qū)賬號并接受相關(guān)的協(xié)議,此文件提供了以下組件:
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的相關(guān)插件,重新啟動VS2015后將會看到Oracle的相關(guān)命令,比如SQL *PLUS支持等。同時添加數(shù)據(jù)庫時也能看到相應(yīng)的選項。
ODP.Net支持所有Oracle版本,因此下載時只需要注意VS的版本即可。
配置tnsnames.ora
ODP.Net默認使用安裝目錄下的 tnsnames.ora ,若安裝目錄在Program Files下,可能會遇到無權(quán)限等問題,此時使用管理員權(quán)限打開命令行,切換到對應(yīng)目錄并使用notepad編輯。
復(fù)制服務(wù)器端的tnsnames.ora文件內(nèi)容,或者自己手動編輯,格式如下:
數(shù)據(jù)源別名 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 主機名或IP)(PORT = 端口號))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 數(shù)據(jù)庫服務(wù)名)
)
)
添加數(shù)據(jù)庫
打開 工具 - 連接到數(shù)據(jù)庫 ,數(shù)據(jù)源修改為 Oracle數(shù)據(jù)庫 下的 ODP.NET,托管驅(qū)動程序 ,然后點擊 確定 ,打開 添加連接 窗口。
填寫用戶名,密碼并選擇數(shù)據(jù)源,然后測試連接,成功的話說明已經(jīng)連通,點擊確定即可。
使用虛擬機搭建數(shù)據(jù)庫的額外Tips
根據(jù)某網(wǎng)友分析,Oracle的監(jiān)聽器在通過1521端口連接后,會開啟另外一個新的隨機端口進行數(shù)據(jù)通訊,因此使用NAT方式虛擬網(wǎng)卡可能會導(dǎo)致連接失敗。這種情況下,請使用橋接方式虛擬網(wǎng)卡,并在 net manager 中將 loaclhost 修改為虛擬機當(dāng)前的IP。重啟監(jiān)聽服務(wù)后,再試。
連接數(shù)據(jù)庫并使用
連接數(shù)據(jù)庫
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()
查詢數(shù)據(jù)
成功配置數(shù)據(jù)源之后,只需要向界面上拖動 DataGridView ,并進行相關(guān)配置,選擇自己需要的表即可。
插入圖片的正確姿勢
圖片作為二進制數(shù)據(jù)無法直接拼湊出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
數(shù)據(jù)類型不符,檢查對應(yīng)項目數(shù)據(jù)類型是否正確。
missing comma
命令格式不對,檢查一下自己的SQL命令是否有錯誤,特別是在有字符串的時候,需要使用 "" 來代表一個字符串中的 " 。
identifier is too long
標識符過長(不得超過30字符),不是非常明白原因,不過我取消掉insert命令中指定位置的部分之后,這個錯誤消失了。
missing INTO keyword
缺少into關(guān)鍵字(手滑打成了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. 將系統(tǒng)的tnsnames.ora拷貝到該目錄下;
?3. 在PLSQL Developer中設(shè)置Oracle_Home和OCI Library:
Tools?Preferences?Oracle?Connection:
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的解決方法如下:
本機環(huán)境:64位win7,安裝了64位的oracle桌面類
服務(wù)器環(huán)境:64位windows server 2008,64位oracle服務(wù)器端
問題:本機用sql developer連數(shù)據(jù)庫沒有問題,winform程序連接也沒有問題,但是web程序連接oracle失敗,報錯:“嘗試加載 Oracle 客戶端庫時引發(fā) BadImageFormatException。如果在安裝 32 位 Oracle 客戶端組件的情況下以 64 位模式運行,將出現(xiàn)此問題?!?/p>
解決過程:在網(wǎng)上查找原因,說是因為VS的webDe.webServer.exe 是一個32位的進程,所以連不上64位數(shù)據(jù)庫,解決方法提了很多,包括把項目的屬性里的生成選項里的目標平臺:改為x86,web項里的服務(wù)器改成iis不使用vs自帶的web deleloper ment 服務(wù),修改path環(huán)境變量等,但是都沒管用。
最終的解決辦法:安裝32位oracle客戶端(win32_11gR2_client.zip),但是這樣一來winform程序又連不上數(shù)據(jù)庫了,得把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 = 服務(wù)器IP)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
服務(wù)器tnsnames.ora
SERVICEORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 服務(wù)器名稱)(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這個實例,沒有問題。但是想連接到服務(wù)器上的orcl實例,該如何寫連接字符串,其它地方都一樣吧,只是Data Source要怎么寫?
------回答---------
------其他回答(90分)---------
本地用Net Configuration Assistant 建個net服務(wù),連接倒服務(wù)器,net服務(wù)名為ORCL_SVR,確保連接正確,然后Data Source=ORCL_SVR即可。
------其他回答(5分)---------
把你QQ告訴我,我連過去給你看一下。
------其他回答(5分)---------
引用 9 樓 sorry0481 的回復(fù):
又搞了一會,發(fā)現(xiàn)問題了,可是不知道怎么解決,服務(wù)器使用Net Configuration Assistant 測試連接自己,沒有問題??蛻舳巳肗et Configuration Assistant 測試連接服務(wù)器也沒有問題??梢娨呀?jīng)配置好了,但是在運行Microsoft Visual Studio 2008代碼時,連接字符串報錯:“ORA-12154: TNS: 無法解析指定的連接標識符”,看了下斷點,錯誤是這個:
ServerVersion “((System.Data.Common.DbConnection)(oracleConnection)).ServerVersion”引發(fā)了“System.InvalidOperationException”類型的異常 string {System.InvalidOperationException}
分析了下,應(yīng)該是版本的問題,可是我只安了一個11G,沒有安其它版本,結(jié)果想到,是不是安了Oracle Developer Tools for Visual Studio .NET這個引起的??哪位仁兄碰到過類似問題??該怎么解決???
你確定DB連上了?tnsnames 跟你的config檔設(shè)定是否一致?我也遇到過,血的教訓(xùn)啊。。。
------回答---------
------其他回答(90分)---------
本地用Net Configuration Assistant 建個net服務(wù),連接倒服務(wù)器,net服務(wù)名為ORCL_SVR,確保連接正確,然后Data Source=ORCL_SVR即可。
------其他回答(5分)---------
把你QQ告訴我,我連過去給你看一下。
------其他回答(5分)---------
引用 9 樓 sorry0481 的回復(fù):
又搞了一會,發(fā)現(xiàn)問題了,可是不知道怎么解決,服務(wù)器使用Net Configuration Assistant 測試連接自己,沒有問題??蛻舳巳肗et Configuration Assistant 測試連接服務(wù)器也沒有問題。可見已經(jīng)配置好了,但是在運行Microsoft Visual Studio 2008代碼時,連接字符串報錯:“ORA-12154: TNS: 無法解析指定的連接標識符”,看了下斷點,錯誤是這個:
ServerVersion “((System.Data.Common.DbConnection)(oracleConnection)).ServerVersion”引發(fā)了“System.InvalidOperationException”類型的異常 string {System.InvalidOperationException}
分析了下,應(yīng)該是版本的問題,可是我只安了一個11G,沒有安其它版本,結(jié)果想到,是不是安了Oracle Developer Tools for Visual Studio .NET這個引起的??哪位仁兄碰到過類似問題??該怎么解決???
你確定DB連上了?tnsnames 跟你的config檔設(shè)定是否一致?我也遇到過,血的教訓(xùn)啊
遠程連接字符串應(yīng)該是做這個DB的人設(shè)置好,然后告訴你的.
比如我做了一個庫叫TEST,并且這個庫的IP是192.168.1.100,
那么我用ORACLE自帶的NET CONFIGURATION ASSISTANT建立一個NET SEVERS,一路默認設(shè)置,那么連接字符串就是TEST@192.168.1.100,當(dāng)然,如果我愿意,我可以把連接字符串改成NEWTEST,別人是不會知道的
1、2、3版本是不同的庫環(huán)境。必須服務(wù)器裝下3.5的框架,然后iis設(shè)置下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();
}
}