//**********************************************************
//2005-06-21 17:37:11
//程序 吴建明 wujm_xa@sina.com
//功能
//**********************************************************
using System;
using System.Data.OracleClient;
using System.Data;
using System.Windows.Forms;
using System.Collections;
using System.IO;
using UtilityLibrary.WinControls;
namespace DoReport
{
/// <summary>
/// ClsDB 的摘要说明。
/// </summary>
public class ClsDB
{
/// <summary>
/// ===吴建明 数据库访问类2005-04-18===
/// </summary>
public OracleConnection cn;
private OracleCommand cmd;
private OracleDataAdapter ada;
private OracleCommandBuilder bldr;
private DataSet ds;
public DataRow dr;
public OracleTransaction tran;
public String ConnStr;
public Hashtable myHT;
public ClsDB()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public ClsDB(string SConnStr)
{
ConnStr=SConnStr;
}
public void Dispose(OracleConnection Conn)
{
if(cn!=null)
{
cn.Close();
cn.Dispose();
}
GC.Collect();
}
//以下2个方法是执行sql脚本的方法 0raclre没通过,sql server可以
/// <summary>
/// 执行Sql文件
/// </summary>
/// <param name="varFileName"></param>
/// <returns></returns>
public bool ExecuteSqlFile(string varFileName,ProgressBarEx myPrgBar)
{
if(!File.Exists(varFileName))
{
return false;
}
StreamReader sr = File.OpenText(varFileName);
ArrayList alSql = new ArrayList();
string commandText = "";
string varLine = "";
myPrgBar.Value =0;
myPrgBar.Maximum=500;
while(sr.Peek() > -1)
{
varLine = sr.ReadLine();
myPrgBar.Value ++;
if(varLine == "")
{
continue;
}
if(varLine.ToLower() != "go")
{
commandText += varLine;
commandText += "\r\n";
}
else
{
alSql.Add(commandText);
commandText = "";
}
}
sr.Close();
try
{
ExecuteCommand(alSql, myPrgBar);
}
catch
{
return false;
}
return true;
}
public void ExecuteCommand(ArrayList varSqlList,ProgressBarEx myPrgBar)
{
Open();
OracleTransaction varTrans = cn.BeginTransaction();
OracleCommand command = new OracleCommand();
command.Connection =cn;
command.Transaction = varTrans;
try
{
myPrgBar.Value =0;
myPrgBar.Maximum =varSqlList.Count;
// myLabel.Text="开始执行Sql脚本";
foreach(string varcommandText in varSqlList)
{
myPrgBar.Value ++;
// myLabel.Text="执行Sql脚本"+varcommandText;
command.CommandText = varcommandText;
command.ExecuteNonQuery();
}
varTrans.Commit();
// myLabel.Text="执行Sql脚本完毕";
}
catch(Exception ex)
{
varTrans.Rollback();
MessageBox.Show(ex.Message);
throw ex;
}
finally
{
// myLabel.Text="执行Sql脚本失败";
cn.Close();
}
}
//以上是执行sql脚本文件
//**********************************>> 基本数据库操作篇 <<**********************************//
/// <summary>
/// 打开数据库
/// </summary>
public void Open()
{
try
{
if(cn == null)
{
cn = new OracleConnection(ConnStr);
}
if (cn.State== ConnectionState.Closed)
{
cn.Open();
}
}
catch (Exception ex)
{
if(MessageBox.Show("数据库连接失败!\n请检查数据库连接属性!","错误", MessageBoxButtons.RetryCancel,MessageBoxIcon.Error)==DialogResult.Retry )
{
Open();
}
else
{
throw ex;
}
}
finally
{
}
}
/// <summary>
/// 打开数据库,不返回提示
/// </summary>
public void Open(int No)
{
try
{
if(cn == null)
{
cn = new OracleConnection(ConnStr);
}
if (cn.State== ConnectionState.Closed)
{
cn.Open();
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
}
}
/// <summary>
/// 关闭数据库
/// </summary>
public void Close()
{
if (cn != null)
{
cn.Close();
}
}
/// <summary>
/// 返回一个SqlParameter实例
/// </summary>
/// <param name="ParamName"></param>
/// <param name="Value"></param>
/// <returns></returns>
public OracleParameter MakeParam(string ParamName,object Value)
{
return new OracleParameter(ParamName, Value);
}
/// <summary>
/// 调用存储过程创建一个SqlCommand对象
/// </summary>
/// <param name="procName">存储过程</param>
/// <returns></returns>
private OracleCommand CreateCommand(string procName)
{
Open();
OracleCommand cmd = new OracleCommand(procName, cn);
cmd.CommandType = CommandType.StoredProcedure;
return cmd;
}
/// <summary>
/// 调用存储过程创建一个SqlCommand对象
/// </summary>
/// <param name="procName">存储过程</param>
/// <param name="prams">给存储过程传递传输SqlParameter对象</param>
/// <returns></returns>
private OracleCommand CreateCommand(string procName, OracleParameter[] prams)
{
Open();
OracleCommand cmd = new OracleCommand(procName, cn);
cmd.CommandType = CommandType.StoredProcedure;
if (prams != null)
{
foreach (OracleParameter parameter in prams)
cmd.Parameters.Add(parameter);
}
//这一段sql 需要,oracle则需要屏蔽
// cmd.Parameters.Add(
// new OracleParameter("ReturnValue",OracleType.Int32, 4,
// ParameterDirection.ReturnValue, false, 0, 0,
// string.Empty, DataRowVersion.Default, null));
return cmd;
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <returns></returns>
public void RunProc(string procName)
{
OracleCommand cmd = CreateCommand(procName);
cmd.ExecuteNonQuery();
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="prams">给存储过程传递传输SqlParameter对象</param>
/// <returns></returns>
public void RunProc(string procName, OracleParameter[] prams)
{
OracleCommand cmd = CreateCommand(procName, prams);
cmd.ExecuteNonQuery();
}
/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="prams">给存储过程传递传输SqlParameter对象</param>
/// <param name="dataReader">输出一个DataReader对象</param>
public void RunProc(string procName, OracleParameter[] prams, out OracleDataReader dataReader)
{
OracleCommand cmd = CreateCommand(procName, prams);
dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
/// <summary>
/// 获得DataSet对象
/// </summary>
/// <param name="str_Sql">SQL语句</param>
/// <returns></returns>
public DataSet GetDs(string str_Sql)
{
Open();
ada = new OracleDataAdapter(str_Sql,cn);
DataSet ds = new DataSet();
bldr = new OracleCommandBuilder(ada);
ada.Fill(ds);
cn.Close();
return ds;
}
/// <summary>
/// 获得DataSet对象
/// </summary>
/// <param name="tablename">内存表ID</param>
/// <param name="str_Sql">SQL语句</param>
/// <returns></returns>
public DataSet GetDs(string tablename,string str_Sql)
{
Open();
OracleDataAdapter Ada = new OracleDataAdapter(str_Sql,cn);
DataSet ds = new DataSet();
bldr = new OracleCommandBuilder(Ada);
Ada.Fill(ds,tablename);
cn.Close();
return ds;
}
/// <summary>
/// 获得DataTable对象
/// </summary>
/// <param name="str_Sql">SQL语句</param>
/// <returns></returns>
public DataTable GetTable(string str_Sql)
{
return GetDs(str_Sql).Tables[0];
}
/// <summary>
/// 获得DataTable对象
/// </summary>
/// <param name="tablename">内存表ID</param>
/// <param name="str_Sql">SQL语句</param>
/// <returns></returns>
public DataTable GetTable(string tablename,string str_Sql)
{
return GetDs(str_Sql).Tables[tablename];
}
public OracleDataReader GetDataReader(string str_Sql)
{
try
{
Open();
OracleCommand cmd = new OracleCommand(str_Sql,cn);
OracleDataReader dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
return dataReader;
}
catch(Exception ex)
{
throw ex;
}
}
/// <summary>
/// 执行Sql语句
/// </summary>
/// <param name="str_Sql">Sql语句</param>
public void RunSql(string str_Sql)
{
Open();
OracleCommand cmd = new OracleCommand(str_Sql,cn);
cmd.ExecuteNonQuery();
cn.Close();
}
//**********************************>> 数据库操作篇(包括添加Add,修改Edit,删除Del,详细Detail) <<**********************************//
/// <summary>
/// 获得表记录数
/// </summary>
/// <param name="table_name">表名或者表名+条件,GetRsCount("t_user where id="+Request["id"])</param>
/// <returns></returns>
public int GetRsCount(string table_name)
{
string strSql;
int intCount;
Open();
strSql="select count(*) from "+table_name;
OracleCommand cmd=new OracleCommand(strSql,cn);
intCount=(int)cmd.ExecuteScalar();
cn.Close();
return intCount;
}
/// <summary>
/// 获得单个int类型字段总和
/// </summary>
/// <param name="field">字段</param>
/// <param name="table_name">表名或者表名+条件,GetFiledSum("id","t_user where id="+Request["id"])</param>
/// <returns></returns>
public string GetFiledSum(string field,string table_name)
{
string SumValue;
Open();
OracleCommand cmd=new OracleCommand("select sum("+field+") as s from "+table_name,cn);
SumValue=cmd.ExecuteScalar().ToString();
cn.Close();
return SumValue;
}
public string GetFiledSum(string field)
{
string SumValue;
Open();
OracleCommand cmd=new OracleCommand(field,cn);
SumValue=cmd.ExecuteScalar().ToString();
cn.Close();
return SumValue;
}
/// <summary>
/// 获得单个字段值
/// </summary>
/// <param name="str_Sql">Sql语句</param>
/// <returns></returns>
public string GetFiledValue(string str_Sql)
{
string str;
Open();
OracleCommand cmd=new OracleCommand(str_Sql,cn);
str=cmd.ExecuteScalar().ToString();
cn.Close();
return str;
}
/// <summary>
/// 获得表记录数
/// </summary>
/// <param name="table_name">表名或者表名+条件,GetRsCount("t_user where id="+Request["id"])</param>
/// <returns></returns>
public int GetMaxId(string filed,string table_name)
{
string strSql;
int intCount;
Open();
strSql="select max("+filed+") from "+table_name;
OracleCommand cmd=new OracleCommand(strSql,cn);
object obj=cmd.ExecuteScalar();
if (obj==System.DBNull.Value)
{
intCount=1;
}
else
{
intCount = Convert.ToInt32(cmd.ExecuteScalar())+1;
}
cn.Close();
return intCount;
}
/// <summary>
/// 通过SqlCommandBuilder对象增加数据库记录
/// </summary>
/// <param name="sql">Select-SQL语句</param>
public void Builder(string str_Sql)
{
Open();
ada=new OracleDataAdapter(str_Sql,cn);
OracleCommandBuilder myCommandBuilder=new OracleCommandBuilder(ada);
ds=new DataSet();
ada.Fill(ds);
dr=ds.Tables[0].NewRow();
}
/// <summary>
/// 关闭SqlCommandBuilder对象
/// </summary>
public void BuilderClose()
{
ds.Tables[0].Rows.Add(dr);
ada.Update(ds); // 更新数据库
cn.Close(); // 关闭数据库
ds.Clear(); // 清空DataSet对象
}
/// <summary>
/// 通过SqlCommandBuilder对象修改数据库记录
/// </summary>
/// <param name="sql">Select-SQL语句</param>
public void BuilderEdit(string str_Sql)
{
Open();
ada=new OracleDataAdapter(str_Sql,cn);
OracleCommandBuilder myCommandBuilder=new OracleCommandBuilder(ada);
ds=new DataSet();
ada.Fill(ds);
dr=ds.Tables[0].Rows[0];
}
/// <summary>
/// 关闭SqlCommandBuilder对象
/// </summary>
public void BuilderEditClose()
{
ada.Update(ds); // 更新数据库
cn.Close(); // 关闭数据库
ds.Clear(); // 清空DataSet对象
}
//**********************************>> 事务处理篇 <<**********************************//
/// <summary>
/// 开始事务
/// </summary>
public void TranBegin()
{
Open();
tran=cn.BeginTransaction();
}
/// <summary>
/// 结束事务
/// </summary>
public void TranEnd()
{
tran.Commit(); // 结束事务
if (cn!=null)
{
cn.Dispose(); // 关闭数据库
cn.Close(); // 关系数据库
}
if (ds!=null)
{
ds.Clear();
}
}
public OracleDataReader TranGetDataReader(string str_Sql)
{
Open();
OracleCommand cmd=new OracleCommand(str_Sql,cn);
OracleDataReader dr=cmd.ExecuteReader();
return dr;
}
public DataSet TranGetDs(string str_Sql)
{
Open();
OracleDataAdapter Ada = new OracleDataAdapter(str_Sql,cn);
Ada.SelectCommand.Transaction=tran;
DataSet ds = new DataSet();
Ada.Fill(ds);
//cn.Close();
return ds;
}
public DataTable TranGetTable(string str_Sql)
{
return TranGetDs(str_Sql).Tables[0];
}
/// <summary>
/// 获得表记录数
/// </summary>
/// <param name="table_name">表名或者表名+条件,GetRsCount("t_user where id="+Request["id"])</param>
/// <returns></returns>
public int TranGetRsCount(string table_name)
{
string strSql;
int intCount;
strSql="select count(*) from "+table_name;
OracleCommand cmd=new OracleCommand(strSql,cn);
cmd.Transaction=tran;
intCount=(int)cmd.ExecuteScalar();
return intCount;
}
/// <summary>
/// 获得单个int类型字段总和
/// </summary>
/// <param name="field">字段</param>
/// <param name="table_name">表名或者表名+条件,GetFiledSum("id","t_user where id="+Request["id"])</param>
/// <returns></returns>
public string TranGetFiledSum(string field,string table_name)
{
string SumValue;
OracleCommand cmd=new OracleCommand("select sum("+field+") as s from "+table_name,cn);
cmd.Transaction=tran;
SumValue=cmd.ExecuteScalar().ToString();
return SumValue;
}
/// <summary>
/// 获得单个字段值
/// </summary>
/// <param name="str_Sql">Sql语句</param>
/// <returns></returns>
public string TranGetFiledValue(string str_Sql)
{
string str;
OracleCommand cmd=new OracleCommand(str_Sql,cn);
cmd.Transaction=tran;
str=cmd.ExecuteScalar().ToString();
return str;
}
/// <summary>
/// 执行Sql语句
/// </summary>
/// <param name="str_Sql">Sql语句</param>
public void TranRunSql(string str_Sql)
{
OracleCommand cmd = new OracleCommand(str_Sql,cn);
cmd.Transaction=tran;
cmd.ExecuteNonQuery();
}
/// <summary>
/// 通过SqlCommandBuilder对象增加数据库记录
/// </summary>
/// <param name="sql">Select-SQL语句</param>
public void TranBuilder(string str_Sql)
{
ada=new OracleDataAdapter(str_Sql,cn);
ada.SelectCommand.Transaction=tran;
OracleCommandBuilder myCommandBuilder=new OracleCommandBuilder(ada);
ds=new DataSet();
ada.Fill(ds);
dr=ds.Tables[0].NewRow();
}
/// <summary>
/// 关闭SqlCommandBuilder对象
/// </summary>
public void TranBuilderClose()
{
ds.Tables[0].Rows.Add(dr);
ada.Update(ds); // 更新数据库
}
/// <summary>
/// 通过SqlCommandBuilder对象修改数据库记录
/// </summary>
/// <param name="sql">Select-SQL语句</param>
public void TranBuilderEdit(string str_Sql)
{
ada=new OracleDataAdapter(str_Sql,cn);
ada.SelectCommand.Transaction=tran;
OracleCommandBuilder myCommandBuilder=new OracleCommandBuilder(ada);
ds=new DataSet();
ada.Fill(ds);
dr=ds.Tables[0].Rows[0];
}
/// <summary>
/// 关闭SqlCommandBuilder对象
/// </summary>
public void TranBuilderEditClose()
{
ada.Update(ds); // 更新数据库
}
/// <summary>
/// 事务回滚
/// </summary>
public void TranRollback()
{
tran.Rollback(); // 数据库回滚
cn.Dispose(); // 关闭数据库
cn.Close(); // 关系数据库
}
}
}
相关文章
- Java 数据结构-特点: 代表一个队列,通常按照先进先出(FIFO)的顺序操作元素。 实现类: LinkedList, PriorityQueue, ArrayDeque。 堆(Heap) 堆(Heap)优先队列的基础,可以实现最大堆和最小堆。 PriorityQueue<Integer minHeap = new PriorityQueue<>; PriorityQueue<Integer maxHeap = new PriorityQueue<>(Collections.reverseOrder); 树(Trees) Java 提供了 TreeNode 类型,可以用于构建二叉树等数据结构。 class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } 图(Graphs) 图的表示通常需要自定义数据结构或使用图库,Java 没有内建的图类。 以上介绍的只是 Java 中一些常见的数据结构,实际上还有很多其他的数据结构和算法可以根据具体问题选择使用。 其他一些说明 以下这些类是传统遗留的,在 Java2 中引入了一种新的框架-集合框架(Collection),我们后面再讨论。 枚举(Enumeration) 枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。 例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。 关于枚举接口的更多信息,请参见枚举(Enumeration)。 位集合(BitSet) 位集合类实现了一组可以单独设置和清除的位或标志。 该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。 关于该类的更多信息,请参见位集合(BitSet)。 向量(Vector) 向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。 和数组一样,Vector对象的元素也能通过索引访问。 使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。 关于该类的更多信息,请参见向量(Vector) 栈(Stack) 栈(Stack)实现了一个后进先出(LIFO)的数据结构。 你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。 当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。 关于该类的更多信息,请参见栈(Stack)。 字典(Dictionary) 字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。 当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用 Dictionary。 由于 Dictionary 类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。 关于该类的更多信息,请参见字典( Dictionary)。 Dictionary 类在较新的 Java 版本中已经被弃用(deprecated),推荐使用 Map 接口及其实现类,如 HashMap、TreeMap 等,来代替 Dictionary。
- 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式
- Oracle连接数据库的封装类OracleDB
- Python一个简单的数据库类封装
- 数据库操作的封装类 Access\FoxPro\SQLServer\Oracle
- 封装一个访问Oracle数据库的类
- 一个有用的oracle数据库访问封装类
- ObjectARX中调用ADO封装类实现数据库查询读取写入数据的一个类实例
- sqlHelper封装类,用于对数据库的操作,此类将查询操作中返回的结果集传递给了一个数组,直接将资源关闭
- OracleHelper[.Net 连接Oracle数据库的封装类]