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

本来是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. Spring aop expression

    任意公共方法的执行:execution(public * *(..))任何一个名字以“set”开始的方法的执行:execution(* set*(..))AccountService接口定义的任意方法 ...

  2. Flex坐标

    flash和flex针对不同的目的,提供了3种不同的坐标系. 全局的就是(stage级别的) 本地坐标系(组件级别的) 内容坐标系(相对于本地坐标系说的) 这些坐标系的点是可以转换的,并且有相应的方法 ...

  3. C++的优秀特性4:指针

    (转载请注明原创于潘多拉盒子) 其实指针不是C++的特性,而是地地道道的C的特性.有人说C++继承了C的指针,实在是败笔,造成内存泄漏云云,纯粹是不懂.可以这么说,如果没有指针,C++会逊色很多,应用 ...

  4. NAT类型与穿透 及 STUN TURN 协议

    STUN : Simple Traversal of User Datagram Protocol [UDP] Through Network Address Translators [NATs] S ...

  5. vim编码相关配置

    主要与三个参数有有关 fileencoding 缩写:fenc 保存文件时所用的编码 set fenc 查看当前文件的编码 set fenc=utf-8 可以将当前文件转换为utf-8编码 filee ...

  6. 试读《JavaScript语言精髓与编程实践》

    有幸看到iteye的活动,有幸读到<JavaScript语言精髓与编程实践_第2版>的试读版本,希望更有幸能完整的读到此书. 说来读这本书的冲动,来得很诡异,写一篇读后感,赢一本书,其实奖 ...

  7. A. Fox and Box Accumulation

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  8. window.showModalDialog 与window.open传递参数的不同?

    简单的说,就是一个在弹出窗口之后可以做其它的事,即window.open 另一个在弹出窗口之后不能做其它的事,只能是关闭了当前的窗口之后才能做其它的事,即window.showModalDialog ...

  9. Android 百度地图定位(手动+自动) 安卓开发教程

    近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置.  经过2天研究 ...

  10. iOS开发——UI篇Swift篇&UIWebView

    UIWebView //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAn ...