1. 程式人生 > >.NET/C#/Oracle資料庫操作類

.NET/C#/Oracle資料庫操作類

using System;  
using System.Data;  
using System.Collections.Generic;  
using System.Configuration;  
using System.Data.OracleClient;  
using System.Text;  
using System.IO;  
  
/// <summary>  
/// Oracle資料庫操作類  
/// </summary>  
internal static class OracleHelper  
{  
    //資料庫連線字串  
    private readonly static string connstr = ConfigurationManager.ConnectionStrings["ConnectionStrings"].ConnectionString;  
    /// <summary>  
    /// 執行資料庫查詢操作,返回受影響的行數  
    /// </summary>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    /// <returns>當前查詢操作影響的資料行數</returns>  
    internal static int ExecuteNonQuery(string cmdText, params OracleParameter[] commandParameters)  
    {  
        OracleCommand command = new OracleCommand();  
        OracleConnection connection = new OracleConnection(connstr);  
        int result = 0;  
  
        try  
        {  
            PrepareCommand(command, connection, null,CommandType.Text, cmdText, commandParameters);  
            result = command.ExecuteNonQuery();  
            command.Parameters.Clear();  
        }  
        catch  
        {  
            throw;  
        }  
        finally  
        {  
            command.Dispose();  
            connection.Close();  
            connection.Dispose();  
        }  
  
        return result;  
    }  
  
    /// <summary>  
    /// 執行資料庫事務查詢操作,返回受影響的行數  
    /// </summary>  
    /// <param name="transaction">資料庫事務物件</param>  
    /// <param name="cmdType">Command型別</param>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    /// <returns>當前事務查詢操作影響的資料行數</returns>  
    internal static int ExecuteNonQuery(OracleTransaction transaction, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)  
    {  
        OracleCommand command = new OracleCommand();  
        OracleConnection connection = transaction.Connection;  
        int result = 0;  
  
        try  
        {  
            PrepareCommand(command, connection, transaction, cmdType, cmdText, commandParameters);  
            result = command.ExecuteNonQuery();  
            command.Parameters.Clear();  
        }  
        catch  
        {  
            throw;  
        }  
        finally  
        {  
            transaction.Dispose();  
            command.Dispose();  
            connection.Close();  
            connection.Dispose();  
        }  
  
        return result;  
    }  
  
    /// <summary>  
    /// 執行資料庫查詢操作,返回受影響的行數  
    /// </summary>  
    /// <param name="connection">Oracle資料庫連線物件</param>  
    /// <param name="cmdType">Command型別</param>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    /// <returns>當前查詢操作影響的資料行數</returns>  
    internal static int ExecuteNonQuery(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)  
    {  
        if (connection == null) throw new ArgumentNullException("當前資料庫連線不存在");  
        OracleCommand command = new OracleCommand();  
        int result = 0;  
  
        try  
        {  
            PrepareCommand(command, connection, null, cmdType, cmdText, commandParameters);  
            result = command.ExecuteNonQuery();  
            command.Parameters.Clear();  
        }  
        catch  
        {  
            throw;  
        }  
        finally  
        {  
            command.Dispose();  
            connection.Close();  
            connection.Dispose();  
        }  
  
        return result;  
    }  
  
    /// <summary>  
    /// 執行資料庫查詢操作,返回OracleDataReader型別的記憶體結果集  
    /// </summary>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    /// <returns>當前查詢操作返回的OracleDataReader型別的記憶體結果集</returns>  
    internal static OracleDataReader ExecuteReader(string cmdText, params OracleParameter[] commandParameters)  
    {  
        OracleCommand command = new OracleCommand();  
        OracleConnection connection = new OracleConnection(connstr);  
        OracleDataReader reader = null;  
  
        try  
        {  
            PrepareCommand(command, connection, null,CommandType.Text, cmdText, commandParameters);  
            reader = command.ExecuteReader(CommandBehavior.CloseConnection);  
            command.Parameters.Clear();  
            return reader;  
        }  
        catch  
        {  
            command.Dispose();  
            connection.Close();  
            throw;  
        }  
    }  
  
    /// <summary>  
    /// 執行資料庫查詢操作,返回DataSet型別的結果集  
    /// </summary>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    /// <returns>當前查詢操作返回的DataSet型別的結果集</returns>  
    internal static DataSet ExecuteDataSet(string cmdText, params OracleParameter[] commandParameters)  
    {  
        OracleCommand command = new OracleCommand();  
        OracleConnection connection = new OracleConnection(connstr);  
        DataSet dataset = null;  
  
        try  
        {  
            PrepareCommand(command, connection, null,CommandType.Text, cmdText, commandParameters);  
            OracleDataAdapter adapter = new OracleDataAdapter();  
            adapter.SelectCommand = command;  
            dataset = new DataSet();  
            adapter.Fill(dataset);  
            command.Parameters.Clear();  
        }  
        catch  
        {  
            throw;  
        }  
        finally  
        {  
            command.Dispose();  
            connection.Close();  
            connection.Dispose();  
        }  
  
        return dataset;  
    }  
  
    /// <summary>  
    /// 執行資料庫查詢操作,返回DataTable型別的結果集  
    /// </summary>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    /// <returns>當前查詢操作返回的DataTable型別的結果集</returns>  
    internal static DataTable ExecuteDataTable(string cmdText, params OracleParameter[] commandParameters)  
    {  
        OracleCommand command = new OracleCommand();  
        OracleConnection connection = new OracleConnection(connstr);  
        DataTable table = null;  
  
        try  
        {  
            PrepareCommand(command, connection, null,CommandType.Text, cmdText, commandParameters);  
            OracleDataAdapter adapter = new OracleDataAdapter();  
            adapter.SelectCommand = command;  
            table = new DataTable();  
            adapter.Fill(table);  
            command.Parameters.Clear();  
        }  
        catch  
        {  
            throw;  
        }  
        finally  
        {  
            command.Dispose();  
            connection.Close();  
            connection.Dispose();  
        }  
  
        return table;  
    }  
  
    /// <summary>  
    /// 執行資料庫查詢操作,返回結果集中位於第一行第一列的Object型別的值  
    /// </summary>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    /// <returns>當前查詢操作返回的結果集中位於第一行第一列的Object型別的值</returns>  
    internal static object ExecuteScalar(string cmdText, params OracleParameter[] commandParameters)  
    {  
        OracleCommand command = new OracleCommand();  
        OracleConnection connection = new OracleConnection(connstr);  
        object result = null;  
  
        try  
        {  
            PrepareCommand(command, connection, null,CommandType.Text, cmdText, commandParameters);  
            result = command.ExecuteScalar();  
            command.Parameters.Clear();  
        }  
        catch  
        {  
            throw;  
        }  
        finally  
        {  
            command.Dispose();  
            connection.Close();  
            connection.Dispose();  
        }  
  
        return result;  
    }  
  
    ///    <summary>  
    ///    執行資料庫事務查詢操作,返回結果集中位於第一行第一列的Object型別的值  
    ///    </summary>  
    ///    <param name="transaction">一個已存在的資料庫事務物件</param>  
    ///    <param name="commandType">命令型別</param>  
    ///    <param name="commandText">Oracle儲存過程名稱或PL/SQL命令</param>  
    ///    <param name="commandParameters">命令引數集合</param>  
    ///    <returns>當前事務查詢操作返回的結果集中位於第一行第一列的Object型別的值</returns>  
    internal static object ExecuteScalar(OracleTransaction transaction, CommandType commandType, string commandText, params OracleParameter[] commandParameters)  
    {  
        if (transaction == null) throw new ArgumentNullException("當前資料庫事務不存在");  
        OracleConnection connection = transaction.Connection;  
        if (connection == null) throw new ArgumentException("當前事務所在的資料庫連線不存在");  
  
        OracleCommand command = new OracleCommand();  
        object result = null;  
  
        try  
        {  
            PrepareCommand(command, connection, transaction, commandType, commandText, commandParameters);  
            result = command.ExecuteScalar();  
            command.Parameters.Clear();  
        }  
        catch  
        {  
            throw;  
        }  
        finally  
        {  
            transaction.Dispose();  
            command.Dispose();  
            connection.Close();  
            connection.Dispose();  
        }  
  
        return result;  
    }  
  
    /// <summary>  
    /// 執行資料庫查詢操作,返回結果集中位於第一行第一列的Object型別的值  
    /// </summary>  
    /// <param name="connection">資料庫連線物件</param>  
    /// <param name="cmdType">Command型別</param>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    /// <returns>當前查詢操作返回的結果集中位於第一行第一列的Object型別的值</returns>  
    internal static object ExecuteScalar(OracleConnection connection, CommandType cmdType, string cmdText, params OracleParameter[] commandParameters)  
    {  
        if (connection == null) throw new ArgumentException("當前資料庫連線不存在");  
        OracleCommand command = new OracleCommand();  
        object result = null;  
  
        try  
        {  
            PrepareCommand(command, connection, null, cmdType, cmdText, commandParameters);  
            result = command.ExecuteScalar();  
            command.Parameters.Clear();  
        }  
        catch  
        {  
            throw;  
        }  
        finally  
        {  
            command.Dispose();  
            connection.Close();  
            connection.Dispose();  
        }  
  
        return result;  
    }  
  
    /// <summary>  
    /// 執行資料庫命令前的準備工作  
    /// </summary>  
    /// <param name="command">Command物件</param>  
    /// <param name="connection">資料庫連線物件</param>  
    /// <param name="trans">事務物件</param>  
    /// <param name="cmdType">Command型別</param>  
    /// <param name="cmdText">Oracle儲存過程名稱或PL/SQL命令</param>  
    /// <param name="commandParameters">命令引數集合</param>  
    private static void PrepareCommand(OracleCommand command, OracleConnection connection, OracleTransaction trans, CommandType cmdType, string cmdText, OracleParameter[] commandParameters)  
    {  
        if (connection.State != ConnectionState.Open) connection.Open();  
  
        command.Connection = connection;  
        command.CommandText = cmdText;  
        command.CommandType = cmdType;  
  
        if (trans != null) command.Transaction = trans;  
  
        if (commandParameters != null)  
        {  
            foreach (OracleParameter parm in commandParameters)  
                command.Parameters.Add(parm);  
        }  
    }  
  
    /// <summary>  
    /// 將.NET日期時間型別轉化為Oracle相容的日期時間格式字串  
    /// </summary>  
    /// <param name="date">.NET日期時間型別物件</param>  
    /// <returns>Oracle相容的日期時間格式字串(如該字串:TO_DATE('2007-12-1','YYYY-MM-DD'))</returns>  
    internal static string GetOracleDateFormat(DateTime date)  
    {  
        return "TO_DATE('" + date.ToString("yyyy-M-dd") + "','YYYY-MM-DD')";  
    }  
  
    /// <summary>  
    /// 將.NET日期時間型別轉化為Oracle相容的日期格式字串  
    /// </summary>  
    /// <param name="date">.NET日期時間型別物件</param>  
    /// <param name="format">Oracle日期時間型別格式化限定符</param>  
    /// <returns>Oracle相容的日期時間格式字串(如該字串:TO_DATE('2007-12-1','YYYY-MM-DD'))</returns>  
    internal static string GetOracleDateFormat(DateTime date, string format)  
    {  
        if (format == null || format.Trim() == "") format = "YYYY-MM-DD";  
        return "TO_DATE('" + date.ToString("yyyy-M-dd") + "','" + format + "')";  
    }  
  
    /// <summary>  
    /// 將指定的關鍵字處理為模糊查詢時的合法引數值  
    /// </summary>  
    /// <param name="source">待處理的查詢關鍵字</param>  
    /// <returns>過濾後的查詢關鍵字</returns>  
    internal static string HandleLikeKey(string source)  
    {  
        if (source == null || source.Trim() == "") return null;  
  
        source = source.Replace("[", "[]]");  
        source = source.Replace("_", "[_]");  
        source = source.Replace("%", "[%]");  
  
        return ("%" + source + "%");  
    }  
  
    /// <summary>  
    /// 將文字內容寫入到資料庫的CLOB欄位中(不可用:報連線被關閉的異常)  
    /// </summary>  
    /// <param name="connectionString">資料庫連線字串</param>  
    /// <param name="table">資料庫表名稱</param>  
    /// <param name="where">指定的WHERE條件語句</param>  
    /// <param name="clobField">CLOB欄位的名稱</param>  
    /// <param name="content">要寫入的文字內容</param>  
    internal static void WriteCLOB(string table, string where, string clobField, string content)  
    {  
        if (String.IsNullOrEmpty(connstr) || String.IsNullOrEmpty(table) || String.IsNullOrEmpty(clobField)) return;  
  
        using (OracleConnection connection = new OracleConnection(connstr))  
        {  
            OracleCommand command = null;  
  
            try  
            {  
                connection.Open();  
                command = connection.CreateCommand();  
                command.CommandText = "SELECT " + clobField + " FROM " + table + " WHERE " + where + " FOR UPDATE";  
                OracleDataReader reader = command.ExecuteReader();  
  
                if (reader != null && reader.HasRows)  
                {  
                    reader.Read();  
                    command.Transaction = command.Connection.BeginTransaction();  
  
                    OracleLob lob = reader.GetOracleLob(0);  
                    byte[] buffer = Encoding.Unicode.GetBytes(content);  
                    if (lob != OracleLob.Null) lob.Erase();  
                    lob.Write(buffer, 0, ((buffer.Length % 2 == 0) ? buffer.Length : (buffer.Length - 1)));  
  
                    command.Transaction.Commit();  
                    reader.Close();  
                }  
            }  
            catch  
            {  
                command.Transaction.Rollback();  
                throw;  
            }  
            finally  
            {  
                command.Dispose();  
                connection.Close();  
                connection.Dispose();  
            }  
        }  
    }  
  
    /// <summary>  
    /// 從資料庫中讀取CLOB欄位的內容並進行輸出  
    /// </summary>  
    /// <param name="connectionString">資料庫連線字串</param>  
    /// <param name="table">資料庫表名稱</param>  
    /// <param name="where">指定的WHERE條件語句</param>  
    /// <param name="clobField">CLOB欄位的名稱</param>  
    /// <param name="output">儲存內容輸出的字串變數</param>  
    internal static void ReadCLOB(string connectionString, string table, string where, string clobField, ref string output)  
    {  
        if (String.IsNullOrEmpty(connectionString) || String.IsNullOrEmpty(table) || String.IsNullOrEmpty(clobField)) return;  
  
        using (OracleConnection connection = new OracleConnection(connectionString))  
        {  
            OracleCommand command = null;  
            StreamReader stream = null;  
  
            try  
            {  
                connection.Open();  
                command = connection.CreateCommand();  
                command.CommandText = "SELECT " + clobField + " FROM " + table + " WHERE " + where;  
                OracleDataReader reader = command.ExecuteReader();  
  
                if (reader != null && reader.HasRows)  
                {  
                    reader.Read();  
                    command.Transaction = command.Connection.BeginTransaction();  
  
                    OracleLob lob = reader.GetOracleLob(0);  
                    if (lob != OracleLob.Null)  
                    {  
                        stream = new StreamReader(lob, Encoding.Unicode);  
                        output = stream.ReadToEnd().Trim();  
                        command.Transaction.Commit();  
                        reader.Close();  
                    }  
                }  
            }  
            catch  
            {  
                command.Transaction.Rollback();  
                throw;  
            }  
            finally  
            {  
                stream.Close();  
                command.Dispose();  
                connection.Close();  
                connection.Dispose();  
            }  
        }  
    }  
}  

相關推薦

.NET/C#/Oracle資料庫操作

using System; using System.Data; using System.Collections.Generic; using System.Configuration; using System.Data.OracleClient;

C# Oracle資料庫操作

C# Oracle資料庫操作類 1 using System; 2 using System.Data; 3 using System.Collections.Generic; 4 using System.Configuration; 5 using System.D

SQLite Helper,基於.net c#的SQLite資料庫操作

SQLite這個精巧的小資料庫,無需安裝軟體,只需要一個System.Data.SQLite.DLL檔案即可操作SQLite資料庫。但是據說功能卻非常強大。 簡介: SQLite是一個開源資料庫,現在已變得越來越流行,它的體積很小,被廣泛應用於各種不同型別的應用中。SQLi

ASP.NET MongoDB資料庫操作

1、Web.config檔案中配置資料庫連線資訊,如下程式碼:<appSettings> <!--連線MongoDB資料庫連線字串開始--> <add key="MongoIP" value="192.168.33.162" /&

【asp.net之Web Form】編寫抽象工廠資料庫操作

理解抽象工廠 在ADO.NET對SqlServer,Mysql等的操作步驟類似,不同的是: SqlServer的操作使用的是SqlConnection、SqlCommand,SqlDataAdapter; MySql使用的是MySqlConnection、

ASP.NET資料庫操作——打包

using System; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Web; using System.W

C# 自定義資料庫操作 DataBase

呼叫示例: using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; using System.Web

C# Oracle資料庫連線及操作

1、  將光碟放入光碟機,自動彈出安裝介面,選擇開始安裝; 2、  歡迎:下一步; 3、  檔案定位,所有內容預設,如果更改oracle安裝路徑,在目標路徑中進行更改,下一步; 4、  可用產品:伺服器端選擇第一個

ASP.NET C#各種資料庫連線字串大全——SQLServer、Oracle、Access

  剛開始學習C#開發專案時,長期會為了寫一個安全的高效的資料庫連線發愁。我發現現在很多剛開始學習的朋友和有些做了一兩年的朋友,也有點犯愁,我就貼上這個程式碼,給自己以後做個參考,也給朋友做個學習的參考。      我主要在這裡統計了.NET專案下常用的資料庫連線字串:SQ

java操作ORACLE資料庫工具(JDBC)

package com.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSe

C#的SQL操作實例

ace direct 功能實現 .exe mat post ssa info () 本文實例講述了C#的SQL操作類,分享給大家供大家參考。具體方法如下: 代碼如下: using System; using System.Collections.Generic;

C#對XML操作

C#對XML操作類 該類包含了對XML檔案的建立,新增,讀取,刪除,修改等操作 //#define isUnity #if isUnity using UnityEngine; #endif using System.Collections; using System; using System.C

ADO.NET 封裝的資料庫幫助

using System; using System.Data; using System.Configuration; using System.Data.SqlClient; namespace DAL { /// <summary> /// 資料庫幫助

利用c3p0的QueryRunner封裝資料庫操作

文章目錄 前言 1. 準備 2. 封裝資料庫連線 3. 使用QueryRunner類,實現對資料表的 insert delete update 4. 小結 前言 鑑於最近做一個小專案,想要自己封裝資料庫操作類,但是網上的各種

MySQL資料庫操作(PHP實現,支援連貫操作)

<?php /** * Author: helen * CreateTime: 2016/4/12 20:14 * description: 資料庫操作類(僅對接MySQL資料庫,主要利用MySQLi函式) */ class Database{ //MySQL主機地址 priv

簡單實用的PHP資料庫操作

一個簡單的php mysql資料庫操作類,含有增刪改查以及分頁和排序功能 直接例項化 $db_class 即可使用 !<?php class db_class{ public $db_url; //連線地址 public $db_username; //連線名

php精闢程式碼欣賞,資料庫操作,封裝所有資料庫操作

下面是php各種程式碼庫,個人分享 <?php //******************************************************************* //此處構造一個數據庫操作類,封裝所有資料庫操作 //可以擴充套件便於後臺管理程

查詢oracle資料庫操作記錄

可以使用以下查詢語句查詢oracle相關資訊: 1、查詢oracle修改記錄 select t.SQL_TEXT, t.FIRST_LOAD_TIME from v$sqlarea t where

PHP輕量級資料庫操作Medoo增加、刪除、修改、查詢例子

$database = new medoo ( "my_database" );$datas = $database->select ( "account", [   "user_name",  "email" ], [   "user_id[>]" => 100 ] );// $datas

基於VB.Net的SQL資料庫操作

 本人是根據自己的經歷,將有基於VB.Net的資料庫的操作整理如下,或許不是很完整,後面有機會再補充。現將程式碼裡面的大概內容敘述一下: New(connectstr)方法是建立帶引數的SQLDataBase的例項; UpdateSQL(updatecmd)方法是執行up