C#資料庫訪問之DbHelper類
===========IDBHelper.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.OracleClient;
namespace DAL
{
public interface IDBHelper
{
void getConn();
void openConn();
void closeConn();
void beginTrans();
void commitTrans();
void rollbackTrans();
object execScalar(string sql);
void execSql(string sql);
int execSql(string sql, OracleParameter[] para);
int execSqlREF(string sql);
int execSqlREF(string sql, OracleParameter[] para);
DataSet getDataSet(string sql);
DataSet getDataSet(string sql, OracleParameter[] para);
}
}
===========繼承類DBHelperORACLE
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.OracleClient;
using System.Data.Common;
namespace DAL
{
public class DBHelperORACLE : IDBHelper
{
public OracleConnection conn = null;
private OracleCommand cmd = null;
private OracleDataAdapter adapter = null;
private bool isTrans = false;
private OracleTransaction trans = null;
public DBHelperORACLE() { }
/**
* 獲取資料庫連線物件
* */
public void getConn()
{
String connStr = ConfigurationManager.AppSettings["DB"].ToString();
this.conn = new OracleConnection(connStr);
}
/**
* 開啟資料庫連線
* */
public void openConn()
{
this.getConn();
if ((this.conn != null) && (this.conn.State == ConnectionState.Closed))
{
this.conn.Open();
}
}
/**
* 關閉資料庫連線
* */
public void closeConn()
{
if ((this.conn != null) && (this.conn.State != ConnectionState.Closed) && !this.isTrans)
{
this.conn.Close();
}
}
/**
* 開始事務
* */
public void beginTrans()
{
this.openConn();
this.isTrans = true;
this.trans = this.conn.BeginTransaction();
}
/**
* 提交事務
* */
public void commitTrans()
{
this.trans.Commit();
this.isTrans = false;
this.closeConn();
}
/**
* 回滾事務
* */
public void rollbackTrans()
{
this.trans.Rollback();
this.isTrans = false;
this.closeConn();
}
/**
* 執行DML語句
* */
public void execSql(string sql)
{
if (this.isTrans)
{
this.cmd = conn.CreateCommand();
this.cmd.Transaction = this.trans;
}
else
{
this.openConn();
this.cmd = conn.CreateCommand();
}
this.cmd.CommandText = sql;
this.cmd.ExecuteNonQuery();
this.closeConn();
}
/**
* 執行DML語句(可帶引數)
* */
public int execSql(string sql, OracleParameter[] para)
{
if (this.isTrans)
{
this.cmd = conn.CreateCommand();
this.cmd.Transaction = this.trans;
}
else
{
this.openConn();
this.cmd = conn.CreateCommand();
}
this.cmd.CommandText = sql;
for (int i = 0; i < para.Length; i++)
{
this.cmd.Parameters.Add(para[i]);
}
int result = this.cmd.ExecuteNonQuery();
this.closeConn();
return result;
}
/**
* 執行DML語句,並返回單獨一列的值
* */
public object execScalar(string sql)
{
if (this.isTrans)
{
this.cmd = conn.CreateCommand();
this.cmd.Transaction = this.trans;
}
else
{
this.openConn();
}
this.cmd = conn.CreateCommand();
this.cmd.CommandText = sql;
object returnval=cmd.ExecuteScalar();
this.closeConn();
return returnval;
}
/**
* 執行DML語句,並返回影響行數
* */
public int execSqlREF(string sql)
{
int J;
if (this.isTrans)
{
this.cmd = conn.CreateCommand();
this.cmd.Transaction = this.trans;
}
else
{
this.openConn();
this.cmd = conn.CreateCommand();
}
this.cmd.CommandText = sql;
J = this.cmd.ExecuteNonQuery();
this.closeConn();
return J;
}
/**
* 執行DML語句(可帶引數)並返回影響行數
* */
public int execSqlREF(string sql, OracleParameter[] para)
{
int J = 0;
if (this.isTrans)
{
this.cmd = conn.CreateCommand();
this.cmd.Transaction = this.trans;
}
else
{
this.openConn();
this.cmd = conn.CreateCommand();
}
this.cmd.CommandText = sql;
if (para != null)
{
for (int i = 0; i < para.Length; i++)
{
this.cmd.Parameters.Add(para[i]);
}
}
J = this.cmd.ExecuteNonQuery();
this.closeConn();
return J;
}
/**
* 通過SQL語句返回結果集
* */
public System.Data.DataSet getDataSet(string sql)
{
DataSet dataSet = new DataSet();
if (this.isTrans)
{
this.cmd = conn.CreateCommand();
this.cmd.Transaction = this.trans;
}
else
{
this.openConn();
this.cmd = conn.CreateCommand();
}
cmd.CommandText = sql;
adapter = new OracleDataAdapter(cmd);
adapter.Fill(dataSet);
this.closeConn();
return dataSet;
}
/**
* 通過SQL語句返回結果集
* */
public System.Data.DataSet getDataSet(string sql, OracleParameter[] para)
{
DataSet dataSet = new DataSet();
try
{
if (this.isTrans)
{
this.cmd = conn.CreateCommand();
this.cmd.Transaction = this.trans;
}
else
{
this.openConn();
}
this.cmd = getSqlCmd(sql, para);
adapter = new OracleDataAdapter(cmd);
adapter.Fill(dataSet);
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.conn.Close();
}
return dataSet;
}
/**
* 過濾SQL語句
* */
private string GetSqlStr(string strSql)
{
int startIndex = 0;
int num2 = 0;
while (startIndex < strSql.Length)
{
char ch = strSql[startIndex];
if (ch.ToString() == "?")
{
strSql = strSql.Remove(startIndex, 1).Insert(startIndex, ":p" + num2.ToString());
num2++;
}
startIndex++;
}
return strSql;
}
/**
* 將引數傳入Command物件後返回該Command物件
**/
private OracleCommand getSqlCmd(string sql, OracleParameter[] para)
{
OracleCommand command = conn.CreateCommand();
command.CommandText = sql;
for (int i = 0; i < para.Length; i++)
{
command.Parameters.Add(para[i]);
}
return command;
}
}
}
===========DBFactory 工廠類
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
namespace DAL
{
public class DBFactory
{
private IDBHelper dbhelper;
public IDBHelper getDBFactory()
{
try
{
//獲取當前的資料庫型別
string dbType = ConfigurationManager.AppSettings["DBTYPE"].ToString();
if (dbType == "ORACLE")
{
dbhelper = new DBHelperORACLE();
return dbhelper;
}
return null;
}
catch
{
return null;
}
}
}
}
相關推薦
C#資料庫訪問之DbHelper類
===========IDBHelper.cs using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.Common;
C#資料庫程式設計 之 DbHelper資料操作類【DBHelper.CS】
其實,微軟的企業庫中有一個非常不錯的資料操作類了.但是,不少公司(起碼我遇到的幾個...),對一些"封裝"了些什麼的東西不太敢用,雖然我推薦過微軟的企業庫框架了...但是還是要"評估"...一評就是幾個月...而且,一些公司有的根本就是裸ado.net開發,或者自己封裝的資
C#設計模式之行為類模式:模板方法模式
frame 應該 ocp 方式 src 代碼復用 操作 優缺點 sse 定義(Template Method) 定義一個操作中算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 啟示 組裝電腦一般包含三個部分,主機、顯示
C#設計模式之結構類模式:裝飾模式
負責 gzip null pattern 產生 設計師 san 抽象 接口 定義(Decorator Pattern): 動態的給一個對象添加一些額外的職責。就添加功能來說,它相比生成子類更為靈活。 一、引言 在軟件開發中,我們經常想要對一類對象添加不同的功能,例如要給手
C++PrimerPlus學習之使用類
運算子過載 一個例子 //mytime0.h #ifndef MYTIME0_H_INCLUDED #define MYTIME0_H_INCLUDED class Time { private: int hours; int minutes; publi
C# 資料庫分頁顯示類
using System.Data; using System.Windows.Forms; namespace WeightSystem { class Page { public void Load(int pagesize, int recordcount, int pageco
c#資料庫訪問返回值型別為SqlDataReader時使用using時注意的問題
在封裝通用 SQLSERVER 資料可訪問方法時,如果返回值型別為 SqlDataReader ,那麼在建立連線字串的時候,我們不能寫成如下 public static SqlDataReader
C++筆試題之String類的實現
能夠準確無誤地編寫出String類的建構函式、拷貝建構函式、賦值函式和解構函式的面試者至少已經具備了C++基本功的60%以上! 在這個類中包括了指標類成員變數m_data,當類中包括指標類成員變數時,一定要過載其拷貝建構函式、賦值函式和解構函式,這既是對C++程式設計師的基本要求,也是《Effective C
C#學習筆記之六 類定義中static關鍵字的用法暨C#中靜態變數的意義與使用
<span style="font-size:18px;">using System; namespace MakeoutStatic { class Counter { public static int num; public void clear() { num = 0;
C語言筆記之儲存類
在C語言中,一個數據物件(往往是指變數)可以由3種屬性來描述:作用域,儲存時期,連結。每種屬性有不同的值,這些不同值的組合構成資料物件的儲存模型,又稱為儲存類,即,一個數據物件如何存在於計算機中。以下
49.C#--多態之抽象類
[] 調用 允許 code 類對象 () ima 方法 一個 static void Main(string[] args){//抽象類例子:狗狗會叫,貓咪也會叫//實現多態,抽象類不能創建父類對象,所以只能指向子類//調用狗狗會叫的方法,創建一個子類對象賦值給父類Anim
C# winfrom DBHelper 資料庫訪問類
using System; using System.Data.SqlClient; using System.Data; using System.Collections.Generic; using System.Configuration; using System.Linq; using Sys
【C#基礎】之訪問修飾符、類與屬性、類與結構的簡單介紹
在學方法之前先學習類…… 介紹類之前先介紹下C#中常用的四個訪問修飾符: 我的疑問:結構與類的區別?結構裡不能定義方法,它們都可以定義多個屬性,什麼時候要用結構?什麼時候要用類? 一、C#中的4個常用訪問修飾符: public:可以在任何地方被訪問 internal:只能
C#資料庫公共訪問類----公共的資料庫訪問訪問類
using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.Collectio
【C#】使用ADO.NET訪問Sqlite資料庫,SqliteHelper幫助類
這個就比較簡單了,用過sqlserver的人都知道訪問資料庫的時候一般都會有個SqlHelper的幫助類,這裡就依葫蘆畫瓢寫了個SqliteHelper,很簡單: using System; using System.Collections.Generic
18.C#:VS2010之EF框架新增edmx(自動跟蹤實體生成器):對映到資料庫表和程式碼實體類
在上一篇文章新增好EF資料庫模型的基礎上,為了生成表結構對應的標準類,使用自動跟蹤實體生成器,這裡主要記錄檔案命名注意事項 1.雙擊.edmx檔案,在介面的空白處滑鼠右擊,選中“新增程式碼生成項”,選擇“ADO.NET自跟蹤實體生成器”,會生成兩個.tt檔案 2.注意:其
c++之訪問從基類繼承的成員
1當派生類與基類中有相同成員時:若沒有特別限定,則通過派生類物件使用的是派生類的同名成員。如果要通過派生類物件訪問基類中被隱藏的同名成員,應使用基類名和作用域操作符“::”來限定#include <iostream> using namespace std; cl
我正在使用的一個SQL Server 2000/2005/2008 資料庫訪問類-SqlCommon(C#)
SqlCommon類簡介 SqlCommon類是我在工作中逐步完善的一個用C#編寫的基於 .Net Framework 2.0/3.0/3.5 的一個 SQL Server 2000/2005/2008 訪問類。以簡單的手段實現了資料庫的訪問,並且可以根據引數名獲得所執行的儲
C#訪問SQLServer資料庫訪問幫助類
SQLServer資料庫訪問幫助類 1.web.config配置資料庫連線字串 <?xml version="1.0"?> <configuration> <appSettings> <!-- 連線字串是否加密 --&g
06深入理解C指針之---指針類型和長度
特征 都是 負數 意義 參數類型 同時 print 相關 通過 該系列文章源於《深入理解C指針》的閱讀與理解,由於本人的見識和知識的欠缺可能有誤,還望大家批評指教。 如果考慮到程序的可移植性和跨平臺性時,指針長度就是一個問題,需要慎重處理。一般情況下,數據指針的長度