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

本来是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);

  

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

  1. 解决使用C/C++配置ODBC链接中文显示为问号(?)的问题

    使用VS2015中使用OBDC连接到数据库时,数据库可以正常显示,但是在VS上输出是乱码,如图: 在数据库中course表显示: vs程序结果显示: 查找原因,因为char默认读ascii型,只读到1 ...

  2. C# SqlHelper类的数据库操作

    #region 私有构造函数和方法 private SqlHelper() { } /// <summary> /// 将SqlParameter参数数组(参数值)分配给SqlComman ...

  3. Linux环境下通过ODBC访问MSSql Server

    为了解决Linux系统连接MSSql Server的问题,微软为Linux系统提供了连接MSSql Server的ODBC官方驱动.通过官方驱动,Linux程序可以方便地对MSSql Server进行 ...

  4. 在VC中动态加载ODBC的方法

    在使用VC.VB.Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置ODBC数据源.对于一般用户而言,配置ODBC数据源可能是一件比较困难的工作.而且,在实际应用中,用户往往 ...

  5. Percona TokuDB

    Percona TokuDB Percona TokuDB 1.     TokuDB说明 2.     TokuDB安装 3.     使用TokuDB 3.1 快速插入和富索引 3.2 聚集sec ...

  6. 转载:有关SQL server connection Keep Alive 的FAQ(3)

    转载:http://blogs.msdn.com/b/apgcdsd/archive/2012/06/07/sql-server-connection-keep-alive-faq-3.aspx 这个 ...

  7. macOS上的ODBC-利用unixODBC连接PostgreSQL与SQLite并进行数据迁移

    安装UnixODBC & PSQLODBC driver for UnixODBC $ brew install psqlodbc Updating Homebrew... ==> In ...

  8. freeswitch用户整合(使用mysql数据库的用户表)

    转:freeswitch用户整合(使用mysql数据库的用户表) freeswitch是一款强大的voip服务器,可以语音和视频.但是它默认是采用/directory文件夹下的xml来配置用户的,对于 ...

  9. 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like

    目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据  五.查询数据  六.删除数据  七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...

随机推荐

  1. 理解MFC 文档、视图、框架[转]

    理解文档/视图框架                                      出处.雷神 了解文档和视图的相互作用关系是编写MFC程序的基本功.但是MFC的应用程序框架把文档和视图之间 ...

  2. weblogic/utils/NestedException

    Working with Weblogic 8.1, it’s fine just to put jar of weblogic-8.1.jar into your classpath, your c ...

  3. STM32的TAMPER-RTC管脚作为Tamper使用 - 防拆机

    当 TAMPER引脚上的信号从 0变成1或者从 1变成 0(取决于备份控制寄存器BKP_CR的 TPAL位),会产生一个侵入检测事件.侵入检测事件将所有数据备份寄存器内容清除.  然而为了避免丢失侵入 ...

  4. Sql中的union和union all的讲解

    SQL UNION 和 UNION ALL操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相 ...

  5. HDU 4286 Data Handler 双向链表/Splay

    Data Handler Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  6. Fork/Join框架之双端队列

    简介 ForkJoinPool管理着ForkJoinWorkerThread线程,ForkJoinWorkerThread线程内部有一个双端队列,这个双端队列主要由一个数组queue.数组下标queu ...

  7. [Angular2 Router] Programmatic Router Navigation via the Router API - Relative And Absolute Router Navigation

    In this tutorial we are going to learn how to navigate programmatically (or imperatively) by using t ...

  8. ChinaASP.Upload 错误 '80040002' You must add our copyright info

    ChinaASP.Upload 错误 '80040002' You must add our copyright info: http://www.chinaasp.com 修改 第一步:在“开始-运 ...

  9. windows下查看某个端口被哪个程序占用的方法

    经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用 假如我们需要确定谁占用了我们的9050端口 ...

  10. SQL(基于MySQL)——LIMIT用法

    mysql支持limitselect * from tablename limit n,mn:表示从第几行开始,mysql的行数是从0开始标注. m:表示要显示几行: 例如:select * from ...