參考了文章:http://xuzhihong1987.blog.163.com/blog/static/267315872011426336943/
現在說說我的做法:Winform程序如果想要連接Oracle數據庫,只需要包含相關的dll庫即可。如下是我包含的dll,部分dll可能不需要用到,有待測試:
沒有dll的話可以到Oracle官網下載Install Client(http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html)
下載時要注意選擇與你系統對應的版本。
把壓縮包里面的dll文件包含到程序運行的目錄下就可以了。
連接Oracle數據庫參考代碼如下:
添加引用:using System.Data.OracleClient; (.net framwork 4能找到此引用,部分版本找不到此引用)
string oradb = "Data Source=(DESCRIPTION=" + "(ADDRESS=(PROTOCOL=TCP)(HOST=MyComputerName)(PORT=1521))" + "(CONNECT_DATA=(SERVICE_NAME=DemoDB)));" + "User Id=SYSTEM;Password=************;"; try { OracleConnection conn = new OracleConnection(oradb); conn.Open(); string sql = " select * from DemoOP.T_TEST "; // DemoOP是表T_TEST的user OracleCommand cmd = new OracleCommand(sql, conn); cmd.CommandType = CommandType.Text; //大容量數據,可以進行修改,使用DataSet和DataAdapter DataSet ds = new DataSet(); OracleDataAdapter da = new OracleDataAdapter(); da.SelectCommand = cmd; da.Fill(ds); dataGridView1.DataSource = ds.Tables[0] ; //使用DataReader,讀取數據 OracleDataReader dr = cmd.ExecuteReader(); while (dr.Read()) // C# { comboBox1.Items.Add(dr["NAME"].ToString()); } dr.Close(); conn.Dispose(); //Close()也可以。 } catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); } finally { }
連接數據庫時報“嘗試加載 oracle客戶端庫時引生BadImageFormatExceiption。如果在安裝32位oracle 客戶端組件時的情況下以64位模式運行,將出現問題”。
分析原因是:我的系統是Win7 64位的,Winform工程目標平台設置是X86,修改設置重新編譯即可。具體設置如下:選擇工程名-->屬性-->生成,目標平台選為Any CPU,運行沒問題,能正常連上Oracle.
出處:https://blog.csdn.net/talentworld/article/details/12559591
=======================================================================================
1、在oracle 安裝目錄下 找到 Oracle.DataAccess.dll
在winform項目下添加引用,然后 using Oracle.DataAccess.Client;
其他的都不用動。
連接字符串中 user=xxx 就改成user id=xxx
把原來 Using 的System.Data.OracleClient去掉。
2、測試連接代碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.Common; using Oracle.DataAccess.Client; namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string ConnectionString = "Data Source=127.0.0.1/orcl;user id=system;password=123456;";//寫連接串 OracleConnection conn = new OracleConnection(ConnectionString);//創建一個新連接 try { conn.Open(); OracleCommand cmd = conn.CreateCommand(); if (conn.State == ConnectionState.Open) { textBox1.Text = "連接成功"; } } catch (Exception ee) { System.Diagnostics.Debug.WriteLine(ee.Message); //如果有錯誤,輸出錯誤信息 } finally { conn.Close(); //關閉連接 } } } }
出處:https://blog.csdn.net/zwfp1314/article/details/81129186
=======================================================================================
[winform] 連接Oracle數據庫
- System.Data.OracleClient,已過時,了解即可不推薦使用.
- Oracle.DataAccess.Client也叫ODP.net,需要區分x86/x64版本
- Oracle.ManagedDataAccess.dll,我一般使用第三種.
- ManagedDataAccess
-
項目添加Oracle.ManagedDataAccess.dll,可以直接從Oracle官網下載該模塊,也可以通過Nuget包管理器直接安裝,選擇第一個,然后安裝.
-
直接調用,這里我分開寫了,把獲取Connection單獨放在一個函數里.同時因為寫的程序只是在公司內部使用,所以並沒有考慮防止sql注入。
//獲取Connection public OracleConnection OracleConn(String[] str) { //通過讀取字符數組連接不同的數據庫 String connString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+ str[4]+")(PORT=1521))(CONNECT_DATA=(SERVICE_NAME = "+str[0] +")));User Id="+str[2]+";Password="+str[3]+";"; OracleConnection conn = new OracleConnection(connString); return conn; } //連接數據庫進行操作,用try-catch防止連接的錯誤導致整個程序崩潰 OracleConnection conn = OracleConn(PublicValue.str); try { conn1.Open(); string s_sql1 = ""; for (i = 0; i <m; i++) { 增刪改查 } conn1.Close(); } catch(Exception exception) { MessageBox.Show(exception.Message, "失敗"); conn1.Close(); } }
出處:https://www.jianshu.com/p/c77a100258f8
=======================================================================================
C#連接Oracle的方法實例總結
本文實例總結了C#連接Oracle的方法。分享給大家供大家參考,具體如下:
一、通過System.Data.OracleClient(需要安裝Oracle客戶端並配置tnsnames.ora)
1. 添加命名空間System.Data.OracleClient引用
2.
1
|
using
System.Data.OracleClient;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
string
connString =
"User ID=IFSAPP;Password=IFSAPP;Data Source=RACE;"
;
OracleConnection conn =
new
OracleConnection(connString);
try
{
conn.Open();
MessageBox.Show(conn.State.ToString());
}
catch
(Exception ex)
{
ShowErrorMessage(ex.Message.ToString());
}
finally
{
conn.Close();
}
|
二、通過System.Data.OracleClient(需要安裝Oracle客戶端不需配置tnsnames.ora)
1. 添加命名空間System.Data.OracleClient引用
2.
1
|
using
System.Data.OracleClient;
|
3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
string
connString =
"User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACE)))"
;
OracleConnection conn =
new
OracleConnection(connString);
try
{
conn.Open();
MessageBox.Show(conn.State.ToString());
}
catch
(Exception ex)
{
ShowErrorMessage(ex.Message.ToString());
}
finally
{
conn.Close();
}
|
三、通過System.Data.OleDb和Oracle公司的驅動
1. 添加命名空間System.Data.OracleClient引用
2.
1
|
using
System.Data.OleDb;
|
3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
string
connString =
"Provider=OraOLEDB.Oracle.1;User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACE)))"
;
OleDbConnection conn =
new
OleDbConnection(connString);
try
{
conn.Open();
MessageBox.Show(conn.State.ToString());
}
catch
(Exception ex)
{
ShowErrorMessage(ex.Message.ToString());
}
finally
{
conn.Close();
}
|
四、通過System.Data.OleDb和微軟公司的Oracle驅動
1. 添加命名空間System.Data.OracleClient引用
2.
1
|
using
System.Data.OleDb;
|
3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
string connString =
"Provider=MSDAORA.1;User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACE)))"
;
OleDbConnection cnn =
new
OleDbConnection(connString);
try
{
conn.Open();
MessageBox.Show(conn.State.ToString());
}
catch
(Exception ex)
{
ShowErrorMessage(ex.Message.ToString());
}
finally
{
conn.Close();
}
|
備注:
a.XP操作系統已經安裝了微軟公司的Oracle驅動C:\Program Files\Common Files\System\Ole DB\msdaora.dll
b.該驅動需要Oracle客戶端的三個文件(oraocixe10.dll、oci.dll、ociw32.dll)放在System32下即可
五、使用ODP連接
1. 下載安裝ODP.NET(http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html)
2. 安裝完全成后會產生一序列文件。
3. 找到這個安裝目錄,打開文件夾%ORACLE_HOME%\Network\Admin在這個下面建立一個tnsnames.ora的文件,其內容可以參考其下的Sample目錄下面的配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
Oracle.RACE =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=127.0.0.1)
(PORT=1521)
)
)
(CONNECT_DATA=
(SID=RACE)
(SERVER=DEDICATED)
)
)
|
Oracle.RACE為連接字符串名稱,可以隨便取。等號后面的字符串可以在Enterprise Manager Console工具中連接數據庫后的TNS描述符中拷過來
4. 引用Oracle.DataAccess命名空間
5.
1
|
using
Oracle.DataAccess.Client;
|
6. 示例代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
string
connString =
"DATA SOURCE=Oracle.RACE;PERSIST SECURITY INFO=True;USER ID=IFSAPP;password=IFSAPP"
;
OracleConnection conn =
new
OracleConnection(connString);
try
{
conn.Open();
OracleCommand cmd =
new
OracleCommand(cmdText,conn);
OracleDataReader reader = cmd.ExecuteReader();
this
.DataGridView1.DataSource = reader;
this
.DataGridView1.DataBind();
}
catch
(Exception ex)
{
ShowErrorMessage(ex.Message.ToString());
}
finally
{
conn.Close();
}
|
六、使用第三方驅動
第三方驅動有 Devart,下載驅動 http://www.devart.com/dotconnect/oracle/,但是是商業版,需要購買許可或破解
連接格式 User ID=myUsername;Password=myPassword;Host=ora;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;
1. 引用Devart.Data.Oracle命名空間
2.
1
|
using
Devart.Data.Oracle;
|
3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
OracleConnection conn =
new
OracleConnection();
conn.ConnectionString =
""
;
conn.Unicode =
true
;
conn.UserId =
"IFSAPP"
;
conn.Password =
"IFSAPP"
;
conn.Port = 1521;
conn.Server =
"127.0.0.1"
;
conn.Sid =
"RACE"
;
try
{
conn.Open();
//execute queries, etc
}
catch
(Exception ex)
{
ShowErrorMessage(ex.Message.ToString());
}
finally
{
conn.Close();
}
|
更多關於C#相關內容感興趣的讀者可查看本站專題:《C#程序設計之線程使用技巧總結》、《C#操作Excel技巧總結》、《C#中XML文件操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結》、《C#數據結構與算法教程》、《C#數組操作技巧總結》及《C#面向對象程序設計入門教程》
希望本文所述對大家C#程序設計有所幫助。
出處:https://www.jb51.net/article/117279.htm
=======================================================================================
=======================================================================================
=======================================================================================
C#Winform連接Oracle數據庫 , 及角色講解
一、連接方法
(1)System.Data.OracleClient
注意1:此方法在.NET 4.0之前(包括4.0)是可以的,但在之后版本中就不能用了,官方已經聲明;
注意2:此方法提供的接口權限不足,例如不能以sysdba身份建立連接,即不支持關鍵字“dba privilege”;
注意3:如果安裝的Oracle客戶端是64位的,那么VS2010在編譯時必須指定X64平台,否則報錯
注意4:使用此方法連接數據庫,需要安裝Oracle客戶端或者在服務端構造WebService接口供客戶端調用
(2)Oracle.DataAccess(\product\12.1.0\dbhome_1\ODP.NET\bin\4)
這個是Oracle官方的連接接口(ODP.NET),可以以sysdba身份建立連接,例如
"Data Source=XXX;User ID=XXX;Password=XXX;DBA Privilege=SYSDBA";
使用此方法,不需要額外安裝Oracle客戶端,只需要引用相應DLL即可
二、連接過程中遇到的問題
system和sys賬戶登錄的時候有DBA模式和普通模式,如果是以DBA模式登錄,然后去創建表格,在查詢(連接字符串)中一定要
注明“DBA Privilege=SYSDBA”,否則報錯“ORA-00942: 表或視圖不存在”,謹記!
出處:http://blog.sina.com.cn/s/blog_900ca29d0102vn3r.html
-----------------------------------------------------------------------------------------------------------------
oracle的sysdba權限問題
1、sysdba是一個身份,不是權限,被授予sysdba身份的用戶登錄時有兩種模式可以選擇,一是普通模式,二是sysdba模式。以sysdba模式登錄時可以關閉數據庫,普通模式則沒有權限。
確認你當前模式的方法是在命令行窗口執行show user,普通模式顯示zzy,sysdba模式顯示sys。
2、上面說到了,sysdba是一個身份,不是權限,所以user_sys_privs查不到。
正確的查詢方法是select * from v$pwfile_users;
出處:https://zhidao.baidu.com/question/418248527.html
---------------------------------------------------------------------------------------------------------
Oracle角色
一、概述
角色就是相關權限的命令集合,使用角色的主要目的就是為了簡化權限的管理。假定有用戶a,b,c為了讓他們都擁有權限
1、連接數據庫
2、在scott.emp表上select,insert,update
如果采用直接授權操作,則需要進行12次授權。
如果采用角色就可以簡化
首先將create session,select on scott.emp,insert on scott.emp,update on scott.emp授予角色,然后將該角色授予a,b,c用戶,這樣就可以三次授權搞定。角色分為預定義角色和自定義角色兩類。
二、預定義角色
預定義角色是指Oracle所提供的角色,每種角色都用於執行一些特定的管理任務,下面我們介紹常用的預定義角色connect,resource,dba。
1、connect角色
connect角色具有一般應用開發人員需要的大部分權限,當建立了一個用戶后,多數情況下,只要給用戶授予connect和resource角色就夠了,那么connect角色具有以下系統權限:
alter session
create cluster
create database link
create session
create view
create sequence
2、resource角色
resource角色具有應用開發人員所需要的其他權限,比如建立存儲過程、觸發器等。這里需要注意的是resource角色隱含了unlimited tablespace系統權限。
resource角色包含以下系統權限:
create cluster
create indextype
create table
create sequence
create type
create procedure
create trigger
3、dba角色
dba角色具有所有的系統權限,及with admin option選項,默認的dba用戶為sys和system他們可以將任何系統權限授予其他用戶。但是要注意的是dba角色不具備sysdba和sysoper的特權(啟動和關閉數據庫)。
三、自定義角色
顧名思義就是自己定義的角色,根據自己的需要來定義,一般是DBA來建立,如果用的別的用戶來建立,則需要具有create role的系統權限,在建立角色時可以指定驗證方式(不驗證,數據庫驗證等)。
1、建立角色(不驗證)
如果角色是公用的角色,可以采用不驗證的方式建立角色
sql>create role 角色名 not identified;
2、建立角色(數據庫驗證)
采用這樣的方式時,角色名、口令存放在數據庫中,當激活該角色時,必須提供口令。在建立這種角色時,需要為其提供口令。
create role 角色名 identified by tiger;
3、角色授權
當建立角色時,角色沒有任何權限,為了使得角色完成特定任務,必須為其授予相應的系統權限和對象權限。
給角色授權
給角色授予權限和給用戶授權沒有太多的區別,但是要注意,系統權限的unlimited tablespace對對象權限with grant option選項是不能授予角色的。
sql>conn system/manager;
sql>grant create session to 角色名 with admin option;
sql>conn scott/tiger;
sql> grant select on scott.emp to 角色名;
sql>grant insert,update,delete on scott.emp to 角色名;
通過上面的步驟,就給角色授權了。
4、分配角色給某個用戶
一般分配角色是由dba來完成的,如果要以其他用戶身份分配角色,則要求用戶必須具有grant any role的系統權限。
sql>grant 角色名 to blake with admin option;
因為我給了with admin option選項,所以,blake可以把system分配給它的角色分配給別的用戶。
5、刪除角色
使用drop role,一般是dba來執行的,如用其他用戶則要求該用戶具有drop any role系統權限。
sql>drop role 角色名;
6、顯示角色信息
(1)顯示所有角色
sql>select * from dba_roles;
(2)顯示角色具有的系統權限
sql>select privilege,admin_option from role_sys_privs where role='角色名';
(3)顯示角色具有的對象權限
通過查詢數據字典視圖dba_tab_privs可以查看角色具有的對象權限或是列的權限。
(4)顯示用戶具有的角色及默認角色
當以用戶的身份連接到數據庫時,Oracle會自動的激活默認的角色,通過查詢數據字典視圖dba_role_privs可以顯示某個用戶具有的所有角色及當前默認的橘色。
sql>select granted_role,default_role from dba_role_privs where grantee='用戶名';
出處:http://www.cnblogs.com/BeautyOfCode/archive/2010/09/28/1837239.html
匯總出處:https://www.cnblogs.com/zouhao/p/6164310.html