修改的某人的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);
修改的某人的SqlHelper FOR ODBC的更多相关文章
- 解决使用C/C++配置ODBC链接中文显示为问号(?)的问题
使用VS2015中使用OBDC连接到数据库时,数据库可以正常显示,但是在VS上输出是乱码,如图: 在数据库中course表显示: vs程序结果显示: 查找原因,因为char默认读ascii型,只读到1 ...
- C# SqlHelper类的数据库操作
#region 私有构造函数和方法 private SqlHelper() { } /// <summary> /// 将SqlParameter参数数组(参数值)分配给SqlComman ...
- Linux环境下通过ODBC访问MSSql Server
为了解决Linux系统连接MSSql Server的问题,微软为Linux系统提供了连接MSSql Server的ODBC官方驱动.通过官方驱动,Linux程序可以方便地对MSSql Server进行 ...
- 在VC中动态加载ODBC的方法
在使用VC.VB.Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置ODBC数据源.对于一般用户而言,配置ODBC数据源可能是一件比较困难的工作.而且,在实际应用中,用户往往 ...
- Percona TokuDB
Percona TokuDB Percona TokuDB 1. TokuDB说明 2. TokuDB安装 3. 使用TokuDB 3.1 快速插入和富索引 3.2 聚集sec ...
- 转载:有关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 这个 ...
- macOS上的ODBC-利用unixODBC连接PostgreSQL与SQLite并进行数据迁移
安装UnixODBC & PSQLODBC driver for UnixODBC $ brew install psqlodbc Updating Homebrew... ==> In ...
- freeswitch用户整合(使用mysql数据库的用户表)
转:freeswitch用户整合(使用mysql数据库的用户表) freeswitch是一款强大的voip服务器,可以语音和视频.但是它默认是采用/directory文件夹下的xml来配置用户的,对于 ...
- 手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like
目录: 一.新建项目,添加引用 二.创建数据库 三.创建表 四.插入数据 五.查询数据 六.删除数据 七.运算符 八.like语句 我的环境配置:windows 64,VS,SQLite(点击下 ...
随机推荐
- 使用.NET中的Action及Func泛型委托
委托,在C#编程中占有极其重要的地位,委托可以将函数封装到委托对象中,并且多个委托可以合并为一个委托,委托对象则可以像普通对象一样被存储.传递,之后在任何时刻进行调用,因此,C#中函数回调 ...
- HTML第二天学习笔记
今天看视频学习的第一个知识是HTML中的块元素<div>和行内元素<span>. <!doctype html> <html lang="en&qu ...
- Background Worker Component
http://www.delphiarea.com/products/delphi-components/backgroundworker/ Background Worker Component ( ...
- ARM&Linux 下驱动开发第二节
驱动文件:qudong.c,make生成qudong.ko文件,烧录到ARM板上 #include<linux/init.h> #include<linux/module.h> ...
- 基于私钥加密公钥解密的RSA算法C#实现
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...
- Chrome 开发者工具使用技巧
最近我花了较多的时间使用 Chrome 的开发者工具.我发现了很多之前没用过的好功能 (或还不是特别需要用到的功能,例如 blackboxing 和 asynchronous stacktraces) ...
- [Angular2 Form] Create Radio Buttons for Angular 2 Forms
Using Radio Buttons in Angular 2 requires a basic understanding of forms as well as how their labels ...
- Java Web模块——验证码模块
一.什么是验证码及它的作用 验 证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答. 可以防止恶意破解密码. ...
- 用Systemtap探索MySQL
http://www.actionsky.com/docs/archives/168#Systemtap 目录 1 Systemtap 2 Systemtap 观测点的支持程度 2.1 官方编译的My ...
- 使用@media实现IE hack的方法
文章简介:众所周知,有些时候为了实现IE下的某些效果与现代浏览器一致,我们不得不使用一些hack手段来实现目的.比如说使用“\0”,“\”和“\9”来仅让IE某些版本识别,而对于现代浏览器来说,他会直 ...