vs2022如何連接oracle的解決方法如下:
創(chuàng)新互聯(lián)公司主營湖里網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,湖里h5成都小程序開發(fā)搭建,湖里網(wǎng)站營銷推廣歡迎湖里等地區(qū)企業(yè)咨詢
本機環(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)此問題。“
解決過程:在網(wǎng)上查找原因,說是因為VS的webDe.webServer.exe 是一個32位的進程,所以連不上64位數(shù)據(jù)庫,解決方法提了很多,包括把項目的屬性里的生成選項里的目標(biāo)平臺:改為x86,web項里的服務(wù)器改成iis不使用vs自帶的web deleloper ment 服務(wù),修改path環(huán)境變量等,但是都沒管用。
最終的解決辦法:安裝32位oracle客戶端(win32_11gR2_client.zip),但是這樣一來winform程序又連不上數(shù)據(jù)庫了,得把winform程序的項目屬性里生成選項的目標(biāo)平臺改成x86,這樣就都行了。
在vs2010中使用c# 連接oracle 11g:
一. 在VS2010中連接 Oracle數(shù)據(jù)庫有兩種方法:
第一種:微軟提供的連接方法 : using System.Data.OracleClient;
第二種:Oracle自己提供的方法:using Oracle.DataAccess.Client;
連接字符串:
connectionString="Password=czh;User?ID=czh;Data?Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=XXX.XXX.XXX.XXX)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=skydream)));"
1.?微軟提供的連接方法 : using System.Data.OracleClient;
測試?yán)蹋?/p>
··1.在VS2010新建控制臺應(yīng)用程序(C#);
··2.右鍵、引用,在.NET中選擇System.Data.OracleClient;
··3.在程序中 using?System.Data.OracleClient;
using?System;??
using?System.Collections.Generic;??
using?System.Linq;??
using?System.Text;??
using?System.Data.OracleClient;??
namespace?ConsoleApplication2??
{??
class?Program??
{??
static?void?Main(string[]?args)??
{??
string?connectionString;??
string?queryString;??
connectionString?=?"Data?Source=202.200.136.125/orcl;User?ID=openlab;PassWord=open123";??
queryString?=?"SELECT?*?FROM?T_USER";??
OracleConnection?myConnection?=?new?OracleConnection(connectionString);??
OracleCommand?myORACCommand?=?myConnection.CreateCommand();??
myORACCommand.CommandText?=?queryString;??
myConnection.Open();??
OracleDataReader?myDataReader?=?myORACCommand.ExecuteReader();??
myDataReader.Read();??
Console.WriteLine("email:?"?+?myDataReader["EMAIL"]);??
myDataReader.Close();??
myConnection.Close();??
}??
}??
}
2.Oracle自己提供的方法:using Oracle.DataAccess.Client;
前提條件:安裝oracle或者oracle client以及安裝 Oracle Client 。
··1.在VS2010新建控制臺應(yīng)用程序(C#);
··2.右鍵、引用,在.NET/組件中選擇Oracle.DataAccess.Client;如果找不到則選擇 瀏覽,進入到oracleclient的安裝目錄尋找 Oracle.Data.Access.dll? (典型目錄為:E:\app\Administrator\product\11.2.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll)
··3.程序中添加引用:using Oracle.DataAccess.Client;
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=202.200.155.123/orcl;User?ID=openlab;PassWord=open123";??
queryString?=?"SELECT?*?FROM?T_USER";??
OracleConnection?myConnection?=?new?OracleConnection(connectionString);??
OracleCommand?myORACCommand?=?myConnection.CreateCommand();??
myORACCommand.CommandText?=?queryString;??
myConnection.Open();??
OracleDataReader?myDataReader?=?myORACCommand.ExecuteReader();??
myDataReader.Read();??
Console.WriteLine("email:?"?+?myDataReader["EMAIL"]);??
myDataReader.Close();??
myConnection.Close();??
}??
}??
}
宿主機:Win10 + VS2015 + ODP.Net for VS2015虛擬機:Win7 + Oracle 11g + 橋接
配置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默認(rèn)使用安裝目錄下的 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
標(biāo)識符過長(不得超過30字符),不是非常明白原因,不過我取消掉insert命令中指定位置的部分之后,這個錯誤消失了。
missing INTO keyword
缺少into關(guān)鍵字(手滑打成了inte),檢查一下自己的SQL命令是否有錯誤。
本地機器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 測試連接自己,沒有問題。客戶端全用Net Configuration Assistant 測試連接服務(wù)器也沒有問題。可見已經(jīng)配置好了,但是在運行Microsoft Visual Studio 2008代碼時,連接字符串報錯:“ORA-12154: TNS: 無法解析指定的連接標(biāo)識符”,看了下斷點,錯誤是這個:
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 測試連接自己,沒有問題。客戶端全用Net Configuration Assistant 測試連接服務(wù)器也沒有問題。可見已經(jīng)配置好了,但是在運行Microsoft Visual Studio 2008代碼時,連接字符串報錯:“ORA-12154: TNS: 無法解析指定的連接標(biāo)識符”,看了下斷點,錯誤是這個:
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)啊
網(wǎng)頁題目:vs怎么鏈接oracle vs2013鏈接器在哪
當(dāng)前URL:http://vcdvsql.cn/article14/hpggde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、做網(wǎng)站、App設(shè)計、外貿(mào)網(wǎng)站建設(shè)、微信公眾號、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)