C#Winfrom程序連接Oracle數據庫(免安裝Oracle客戶端)


參考了文章: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數據庫

  1. System.Data.OracleClient,已過時,了解即可不推薦使用.
  2. Oracle.DataAccess.Client也叫ODP.net,需要區分x86/x64版本
  3. Oracle.ManagedDataAccess.dll,我一般使用第三種.
  • ManagedDataAccess
  1. 項目添加Oracle.ManagedDataAccess.dll,可以直接從Oracle官網下載該模塊,也可以通過Nuget包管理器直接安裝,選擇第一個,然后安裝.

     

      

  2. 直接調用,這里我分開寫了,把獲取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的方法,結合實例形式總結分析了幾種常見的C#連接Oracle數據庫的操作技巧與相關注意事項,需要的朋友可以參考下

本文實例總結了C#連接Oracle的方法。分享給大家供大家參考,具體如下:

一、通過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=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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM