重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
using System;
創新互聯建站是專業的康馬網站建設公司,康馬接單;提供成都做網站、網站制作,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行康馬網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
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();
}
}
本地機器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檔設定是否一致?我也遇到過,血的教訓啊
在vs2010中使用c# 連接oracle 11g:
一. 在VS2010中連接 Oracle數據庫有兩種方法:
第一種:微軟提供的連接方法 : 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;
測試例程:
··1.在VS2010新建控制臺應用程序(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新建控制臺應用程序(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();??
}??
}??
}
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,這樣就都行了。
宿主機: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,托管驅動程序 ,然后點擊 確定 ,打開 添加連接 窗口。
填寫用戶名,密碼并選擇數據源,然后測試連接,成功的話說明已經連通,點擊確定即可。
使用虛擬機搭建數據庫的額外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命令是否有錯誤。