修改的某人的SqlHelper FOR ODBC

随便找来的,源作者不明.

本来是SQL SERVER 的 修改为 ODBC使用.

并且修改了连接字符串,可以允许修改一次.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Collections;
using System.Data;

using System.Data.Odbc;

namespace DBUtility
{
    public abstract class OdbcHelper
    {
        //Database connection strings
        private static string connectionStringDefault;

	    public static string ConnectionStringDefault
	    {
		    get {
                if(string.IsNullOrEmpty(connectionStringDefault))
                {
                    return  connectionStringDefault = ConfigurationManager.ConnectionStrings["OdbcConnStringDefault"].ConnectionString;
                }
                else
                {
                    return connectionStringDefault;
                }
            }
		    set {
                if (string.IsNullOrEmpty(connectionStringDefault))
                    connectionStringDefault = value;
            }
	    }

        //Hashtable to store cached parameters
        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());

        /// <summary>
        /// add parameter array to the cache
        /// </summary>
        /// <param name="cacheKey">Key to the parameter cache</param>
        /// <param name="cmdParameters">an array of OdbcParamters to be cached</param>
        public static void SetCacheParameters(string cacheKey, params OdbcParameter[] parameters)
        {

            parmCache[cacheKey] = parameters;
        }

        /// <summary>
        /// Retrieve cached parameters
        /// </summary>
        /// <param name="cacheKey">key used to lookup parameters</param>
        /// <returns>Cached OdbcParamters array</returns>
        public static OdbcParameter[] GetCacheParameters(string cacheKey)
        {
            OdbcParameter[] cachedParms = (OdbcParameter[])parmCache[cacheKey];
            if (cachedParms == null)
            {
                return null;
            }
            OdbcParameter[] clonedParms = new OdbcParameter[cachedParms.Length];
            for (int i = 0; i < cachedParms.Length; i++)
            {
                clonedParms[i] = (OdbcParameter)((ICloneable)cachedParms[i]).Clone();
            }
            return clonedParms;
        }

        /// <summary>
        /// Prepare a command for execution
        /// </summary>
        /// <param name="cmd">OdbcCommand object</param>
        /// <param name="conn">OdbcConneciotn object</param>
        /// <param name="trans">OdbcTransaction object</param>
        /// <param name="cmdType">Cmd type e.g. stored procedure or text</param>
        /// <param name="cmdText">Command text, e.g. Select * From Products</param>
        /// <param name="cmdParms">OdbcParameters to use in the command</param>
        private static void PrepareCommand(OdbcCommand cmd, OdbcConnection conn, OdbcTransaction trans, CommandType cmdType, string cmdText, OdbcParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
            {
                cmd.Transaction = trans;
            }
            cmd.CommandType = cmdType;
            if (cmdParms != null)
            {
                foreach (OdbcParameter parm in cmdParms)
                {
                    cmd.Parameters.Add(parm);
                }
            }
        }

        /// <summary>
        /// Execute a OdbcCommand (that returns no resultset) against the database specified in the connection string using the provided parameters.
        /// </summary>
        /// <param name="connectionString">a valid conneciotn string for a OdbcConnection</param>
        /// <param name="cmdText">the stored procedure name or T-Odbc command</param>
        /// <returns>an int representing the number of rows affected by the command</returns>
        public static int ExecuteNonQuery(string connectionString, string cmdText)
        {
            if (connectionString == null)
            {
                connectionString = ConnectionStringDefault;
            }
            return ExecuteNonQuery(connectionString, cmdText, CommandType.Text, null);
        }

        /// <summary>
        /// Execute a OdbcCommand (that returns no resultset) against the database specified in the connection string using the provided parameters.
        /// </summary>
        /// <param name="connectionString">a valid conneciotn string for a OdbcConnection</param>
        /// <param name="cmdType">the CommandType (stored procedure,text,etc.)</param>
        /// <param name="cmdText">the stored procedure name or T-Odbc command</param>
        /// <returns>an int representing the number of rows affected by the command</returns>
        public static int ExecuteNonQuery(string connectionString, string cmdText, CommandType cmdType)
        {
            if (connectionString == null)
            {
                connectionString = ConnectionStringDefault;
            }
            return ExecuteNonQuery(connectionString, cmdText, cmdType, null);
        }

        /// <summary>
        /// Execute a OdbcCommand (that returns no resultset) against the database specified in the connection string using the provided parameters.
        /// </summary>
        /// <remarks>
        /// e.g.:
        /// int result=ExecuteNonQuery(connString,CommandType.StoredProcedure,"PublishOrders",new OdbcParameter("@prodid",24));
        /// </remarks>
        /// <param name="connectionString">a valid conneciotn string for a OdbcConnection</param>
        /// <param name="cmdType">the CommandType (stored procedure,text,etc.)</param>
        /// <param name="cmdText">the stored procedure name or T-Odbc command</param>
        /// <param name="commandParameters">an array of OdbcParameters used to execute the command</param>
        /// <returns>an int representing the number of rows affected by the command</returns>
        public static int ExecuteNonQuery(string connectionString, string cmdText, CommandType cmdType, params OdbcParameter[] commandParameters)
        {
            if (connectionString == null)
            {
                connectionString = ConnectionStringDefault;
            }
            OdbcCommand cmd = new OdbcCommand();
            using (OdbcConnection conn = new OdbcConnection(connectionString))
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
                int val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
                return val;
            }
        }

        /// <summary>
        /// Execute a OdbcCommand (that returns no resultset) using an existing Odbc Transaction using the provided parameters.
        /// </summary>
        /// <remarks>
        /// e.g.:
        ///  int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new OdbcParameter("@prodid", 24));
        /// </remarks>
        /// <param name="trans">an existing Odbc transaction</param>
        /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
        /// <param name="commandText">the stored procedure name or T-Odbc command</param>
        /// <param name="commandParameters">an array of OdbcParamters used to execute the command</param>
        /// <returns>an int representing the number of rows affected by the command</returns>
        public static int ExecuteNonQuery(OdbcTransaction trans, string cmdText, CommandType cmdType, params OdbcParameter[] commandParameters)
        {
            int val = 0;
            using (OdbcCommand cmd = new OdbcCommand())
            {
                PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters);
                val = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
            }
            return val;
        }

        /// <summary>
        /// Execute a OdbcCommand that returns a resultset against the database specified in the connection string using the provided parameters
        /// </summary>
        /// <param name="connectionString">a valid connection string for a OdbcConnection</param>
        /// <param name="cmdType">the CommandType(stored procedure,text,etc.)</param>
        /// <param name="cmdText">the stroed procedure name or T-Odbc command</param>
        /// <param name="cmdParameters">an array of OdbcParameters used to execute the command</param>
        /// <returns>A OdbcDataReader containing the results</returns>
        public static OdbcDataReader ExecuteReader(string connectionString, string cmdText, CommandType cmdType, params OdbcParameter[] cmdParameters)
        {
            if (connectionString == null)
            {
                connectionString = ConnectionStringDefault;
            }
            OdbcCommand cmd = new OdbcCommand();
            OdbcConnection conn = new OdbcConnection(connectionString);
            // we use a try/catch here because if the method throws an exception we want to
            // close the connection throw code, because no datareader will exist, hence the
            // commandBehaviour.CloseConnection will not work
            try
            {
                PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParameters);
                OdbcDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                return dr;
            }
            catch (Exception)
            {
                conn.Close();
                throw;
            }
        }

        /// <summary>
        /// Execute a OdbcCommand that return a resultset against the database specified in the connection string using the provided parameters
        /// </summary>
        /// <param name="connectionString">a valid connection string for a OdbcConnection</param>
        /// <param name="cmdType">the CommandType(stored procedure,text,etc.)</param>
        /// <param name="cmdText">the stored procedure name or T-Odbc command</param>
        /// <param name="cmdParameters">an array of OdbcParameters userd to execute the command</param>
        /// <returns>A DataTable containing the results</returns>
        public static DataTable ExecuteDataTable(string connectionString, string cmdText, CommandType cmdType, params OdbcParameter[] cmdParameters)
        {
            if (connectionString == null)
            {
                connectionString = ConnectionStringDefault;
            }
            DataTable dt = new DataTable();
            using (OdbcConnection conn = new OdbcConnection(connectionString))
            {
                using (OdbcCommand cmd = new OdbcCommand())
                {
                    PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParameters);
                    OdbcDataAdapter adapter = new OdbcDataAdapter(cmd);
                    adapter.Fill(dt);
                }
            }
            return dt;
        }

        /// <summary>
        /// Execute a OdbcCommand that returns the first column of the first record against the database specified in the connection string
        /// using the provided parameters.
        /// </summary>
        /// <remarks>
        /// e.g.:
        ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new OdbcParameter("@prodid", 24));
        /// </remarks>
        /// <param name="connectionString">a valid connection string for a OdbcConnection</param>
        /// <param name="commandType">the CommandType (stored procedure, text, etc.)</param>
        /// <param name="commandText">the stored procedure name or T-Odbc command</param>
        /// <param name="commandParameters">an array of OdbcParameters used to execute the command</param>
        /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
        public static object ExecuteScalar(string connectionString, string cmdText, CommandType cmdType, params OdbcParameter[] commandParameters)
        {
            if (connectionString == null)
            {
                connectionString = ConnectionStringDefault;
            }
            object val = null;
            using (OdbcConnection connection = new OdbcConnection(connectionString))
            {
                using (OdbcCommand cmd = new OdbcCommand())
                {
                    PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                    val = cmd.ExecuteScalar();
                    cmd.Parameters.Clear();
                }
                return val;
            }
        }

    }
}

使用方式:

string conString = "Driver={SQL Native Client};Server=abc;Database=Items;Uid=sa;Pwd=111111;";

            DBUtility.OdbcHelper.ConnectionStringDefault = conString;
            DataTable dt = DBUtility.OdbcHelper.ExecuteDataTable(conString, "SELECT * FROM item", CommandType.Text, null);

  

时间: 2024-08-07 00:16:11

修改的某人的SqlHelper FOR ODBC的相关文章

Linux环境下通过ODBC访问MSSql Server

为了解决Linux系统连接MSSql Server的问题,微软为Linux系统提供了连接MSSql Server的ODBC官方驱动.通过官方驱动,Linux程序可以方便地对MSSql Server进行访问. 官网提供了三个版本的驱动,分别用于以下发行版的Linux系统: 64bit Red Hat Enterprise Linux 5 64bit Red Hat Enterprise Linux 6 64bit SUSE Linux Enterprise 11 Service Pack 2 (实

C# SqlHelper类的数据库操作

1 #region 私有构造函数和方法 2 3 private SqlHelper() { } 4 5 /// <summary> 6 /// 将SqlParameter参数数组(参数值)分配给SqlCommand命令. 7 /// 这个方法将给任何一个参数分配DBNull.Value; 8 /// 该操作将阻止默认值的使用. 9 /// </summary> 10 /// <param name="command">命令名</param>

Error 20002 (severity 9):Adaptive Server connection failed

环境: Ubuntu12.10_x64 问题: 用tsql访问SQL Server >> tsql -H 192.168.88.133 -p 1433 U sa Error 20002 (severity 9): Adaptive Server connection failed 解决: 查看TDS version >> tsql -C Compile-time settings (established with the "configure" script)

mybatis常用分页插件,快速分页处理

在未分享整个查询分页的执行代码之前,先了解一下执行流程. 1.总体上是利用mybatis的插件拦截器,在sql执行之前拦截,为查询语句加上limit X X 2.用一个Page对象,贯穿整个执行流程,这个Page对象需要用java编写前端分页组件 3.用一套比较完整的三层entity,dao,service支持这个分页架构 4.这个分页用到的一些辅助类 注:分享的内容较多,这边的话我就不把需要的jar一一列举,大家使用这个分页功能的时候缺少什么就去晚上找什么jar包即可,尽可能用maven包导入

Percona TokuDB

Percona TokuDB Percona TokuDB. 1 1.     TokuDB说明... 1 2.     TokuDB安装... 1 3.     使用TokuDB. 1 3.1 快速插入和富索引... 1 3.2 聚集secondary索引... 1 3.3 在线索引创建... 1 3.4 在线添加,删除,扩展,重命名列... 1 3.5            压缩细节... 1 3.6 修改表的压缩... 1 3.7 无io读复制... 1 3.8 事务和ACID兼容恢复..

SQLite C# 用法

1,下载官方的DLL文件 System.Data.SQLite.dll ? 2,修改微软官方的SqlHelper,打造SQLiteHelper,改造方法很简单,批量替换方式 SqlConnection=>SQLiteConnection SqlCommand=>SQLiteCommand SqlParameter=>SQLiteParameter SqlDataReader=>SQLiteDataReader SqlTransaction=>SQLiteTransaction

ODBC实现动态建库和切库

引言 前几天在要把ITOO放在云上,那么实现动态建库和切库就很重要了.第一个我们想到的方法就是用ODBC,动态创建数据库和创建表,其实这种方式就是最简单,也是比较好想到的实现方式.所有的事情,都从简单的开始,就会比较好实现了. 实现思路: 开放数据库互连(Open Database Connectivity,ODBC),分为三步,第一步:拼接Connectionstring字符串,第二步:拼接DML或DDL语句,第三步:执行. 其实这里最重要的实现动态的效果就是用字符串拼接,或者将字符串作为参数

ODBC、ADO

一.VC访问数据库的技术 1.ODBC --Open Database Connectivity微软开放式数据互联,一组用于访问和操作数据库的API,可以访问不同的数据库产品,但只能访问关系型数据库.MFC将这组API函数封装成ODBC类,使用前需要将不同的数据库设置为ODBC数据源. 2.DAO --基于ODBC的,目前已经被淘汰 3.OLE DB  --基于COM技术的,提供了一组用于访问和操作数据库的接口.既可以访问关系型又可以访问非关系型数据,性能也有了很大提高.缺点是学习难度大,对程序

vs创建控制台程序使用C++读写excel文件(ODBC方式)

1.创建一个vs项目,选择windows控制台应用程序,项目名称输入cppRWexcel 2.在StdAfx.h文件最下方加入如下代码: #include <iostream> #include <afxdb.h> #include <odbcinst.h> using namespace std; 3.在cppRWexcel.cpp中写入如下代码: // cppRWexcel.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h