欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET/C#/Oracle数据库操作类实例代码

程序员文章站 2024-01-22 15:29:04
.net/c#/oracle操作类实例代码 using system; using system.data; using system.collections.generic;...

.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();  
            }  
        }  
    }  
}