一个C#实现的数据库访问帮助类DatabaseHelper
来源:互联网 发布:西岐网络 彭永辉 编辑:程序博客网 时间:2024/06/14 11:19
自己实现的数据库访问帮助类库,DataBaseAccessHelper。
支持MySQL、SQL Server,Oracle等数据库类型;
支持多种数据库访问方式;
支持单行记录中某个字段、整行记录及数据集的查询操作;
支持SQL命令执行操作(DML、DDL);
支持存储过程;
支持异步读取数据库记录;
库中各个类说明:
DataBaseAccess:执行数据库访问的核心功能类;
AccessType:数据库访问方式,枚举类型;
DatabaseDefinitions:包含一些常量的定义;
DatabaseParam:数据库参数;
DatabaseAsyncState:异步执行数据查询时的状态;
AccessType:
- /// <summary>
- /// 数据库访问类型
- /// </summary>
- public enum AccessType
- {
- MySQLClient,
- MSSQLClient,
- OracleDirect,
- OracleTNS,
- MySQLODBC,
- MSSQLODBC,
- MSOracleODBC,
- OracleODBC,
- IBMDataDB2,
- DB2ODBC
- }
- /// <summary>
- /// 数据库访问类型
- /// </summary>
- public enum AccessType
- {
- MySQLClient,
- MSSQLClient,
- OracleDirect,
- OracleTNS,
- MySQLODBC,
- MSSQLODBC,
- MSOracleODBC,
- OracleODBC,
- IBMDataDB2,
- DB2ODBC
- }
/// <summary> /// 数据库访问类型 /// </summary> public enum AccessType { MySQLClient, MSSQLClient, OracleDirect, OracleTNS, MySQLODBC, MSSQLODBC, MSOracleODBC, OracleODBC, IBMDataDB2, DB2ODBC }
DatabaseDefinitions:
- /// <summary>
- /// 定义数据库相关常量
- /// 数据库类型常量
- /// 数据库端口常量等
- /// </summary>
- public class DatabaseDefinitions
- {
- public constint DATABASE_TYPE_MYSQL = 1;
- public constint DATABASE_TYPE_MSSQL = 2;
- public constint DATABASE_TYPE_ORACLE = 3;
- public constint DATABASE_TYPE_SYBASE = 4;
- public constint DATABASE_TYPE_DB2 = 5;
- public constint DATABASE_DEFAULT_PORT_MYSQL = 3306;
- public constint DATABASE_DEFAULT_PORT_MSSQL = 1433;
- public constint DATABASE_DEFAULT_PORT_ORACLE = 1521;
- public constint DATABASE_DEFAULT_PORT_SYBASE = 5000;
- public constint DATABASE_DEFAULT_PORT_DB2 = 50000;
- public conststring DATABASE_RETURN_ERROR = "\0x07\0x07\0x07\0x07\0x07";
- }
- /// <summary>
- /// 定义数据库相关常量
- /// 数据库类型常量
- /// 数据库端口常量等
- /// </summary>
- public class DatabaseDefinitions
- {
- public constint DATABASE_TYPE_MYSQL = 1;
- public constint DATABASE_TYPE_MSSQL = 2;
- public constint DATABASE_TYPE_ORACLE = 3;
- public constint DATABASE_TYPE_SYBASE = 4;
- public constint DATABASE_TYPE_DB2 = 5;
- public constint DATABASE_DEFAULT_PORT_MYSQL = 3306;
- public constint DATABASE_DEFAULT_PORT_MSSQL = 1433;
- public constint DATABASE_DEFAULT_PORT_ORACLE = 1521;
- public constint DATABASE_DEFAULT_PORT_SYBASE = 5000;
- public constint DATABASE_DEFAULT_PORT_DB2 = 50000;
- public conststring DATABASE_RETURN_ERROR = "\0x07\0x07\0x07\0x07\0x07";
- }
/// <summary> /// 定义数据库相关常量 /// 数据库类型常量 /// 数据库端口常量等 /// </summary> public class DatabaseDefinitions { public const int DATABASE_TYPE_MYSQL = 1; public const int DATABASE_TYPE_MSSQL = 2; public const int DATABASE_TYPE_ORACLE = 3; public const int DATABASE_TYPE_SYBASE = 4; public const int DATABASE_TYPE_DB2 = 5; public const int DATABASE_DEFAULT_PORT_MYSQL = 3306; public const int DATABASE_DEFAULT_PORT_MSSQL = 1433; public const int DATABASE_DEFAULT_PORT_ORACLE = 1521; public const int DATABASE_DEFAULT_PORT_SYBASE = 5000; public const int DATABASE_DEFAULT_PORT_DB2 = 50000; public const string DATABASE_RETURN_ERROR = "\0x07\0x07\0x07\0x07\0x07"; }
DatabaseParam:
- /// <summary>
- /// 数据库参数
- /// </summary>
- public class DatabaseParam
- {
- /// <summary>
- /// 数据库类型
- /// 1:MySQL
- /// 2:SQL Server
- /// 3:Oracle
- /// 4:Sybase
- /// 5:DB2
- /// </summary>
- public int DBType {get; set; }
- /// <summary>
- /// 数据库服务器地址
- /// </summary>
- public string DBHost {get; set; }
- /// <summary>
- /// 端口
- /// </summary>
- public int DBPort {get; set; }
- /// <summary>
- /// 数据库名
- /// </summary>
- public string DBName {get; set; }
- /// <summary>
- /// 登录用户名
- /// </summary>
- public string DBUser {get; set; }
- /// <summary>
- /// 登录密码
- /// </summary>
- public string DBPassword {get; set; }
- /// <summary>
- /// 默认数据库参数
- /// 数据库类型:MySQL
- /// 端口:3306
- /// 其他为空
- /// </summary>
- public DatabaseParam()
- {
- DBType = 1;
- DBHost = "";
- DBPort = 3306;
- DBName = "";
- DBUser = "";
- DBPassword = "";
- }
- /// <summary>
- /// 指定数据库类型、主机、端口、数据库名、登录名和密码
- /// </summary>
- /// <param name="db_type">数据库类型</param>
- /// <param name="db_host">主机</param>
- /// <param name="db_port">端口</param>
- /// <param name="db_name">数据库名</param>
- /// <param name="db_user">登录名</param>
- /// <param name="db_pass">密码</param>
- public DatabaseParam(int db_type,string db_host, int db_port,string db_name, string db_user,string db_pass)
- {
- DBType = db_type;
- DBHost = db_host;
- DBPort = db_port;
- DBName = db_name;
- DBUser = db_user;
- DBPassword = db_pass;
- }
- /// <summary>
- /// 指定数据库类型、主机、数据库名、登录名和密码,端口根据数据库类型默认指定
- /// </summary>
- /// <param name="db_type">数据库类型</param>
- /// <param name="db_host">主机</param>
- /// <param name="db_name">数据库名</param>
- /// <param name="db_user">登录名</param>
- /// <param name="db_pass">密码</param>
- public DatabaseParam(int db_type,string db_host, string db_name,string db_user, string db_pass)
- {
- DBType = db_type;
- DBHost = db_host;
- switch (db_type)
- {
- case 1:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL;
- break;
- case 2:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MSSQL;
- break;
- case 3:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_ORACLE;
- break;
- case 4:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_SYBASE;
- break;
- case 5:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_DB2;
- break;
- default:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL;
- break;
- }
- DBName = db_name;
- DBUser = db_user;
- DBPassword = db_pass;
- }
- /// <summary>
- /// 指定参数数组
- /// </summary>
- /// <param name="db_params">
- /// 0:数据库类型
- /// 1:数据库服务器地址
- /// 2:端口
- /// 3:数据库名
- /// 4:登录名
- /// 5:密码
- /// </param>
- public DatabaseParam(string[] db_params)
- {
- int db_type, db_port;
- DBType = int.TryParse(db_params[0],out db_type) == true ? db_type : 1;
- DBHost = db_params[1];
- DBPort = int.TryParse(db_params[2],out db_port) == true ? db_type : 3306;
- DBName = db_params[3];
- DBUser = db_params[4];
- DBPassword = db_params[5];
- }
- }
- /// <summary>
- /// 数据库参数
- /// </summary>
- public class DatabaseParam
- {
- /// <summary>
- /// 数据库类型
- /// 1:MySQL
- /// 2:SQL Server
- /// 3:Oracle
- /// 4:Sybase
- /// 5:DB2
- /// </summary>
- public int DBType {get; set; }
- /// <summary>
- /// 数据库服务器地址
- /// </summary>
- public string DBHost {get; set; }
- /// <summary>
- /// 端口
- /// </summary>
- public int DBPort {get; set; }
- /// <summary>
- /// 数据库名
- /// </summary>
- public string DBName {get; set; }
- /// <summary>
- /// 登录用户名
- /// </summary>
- public string DBUser {get; set; }
- /// <summary>
- /// 登录密码
- /// </summary>
- public string DBPassword {get; set; }
- /// <summary>
- /// 默认数据库参数
- /// 数据库类型:MySQL
- /// 端口:3306
- /// 其他为空
- /// </summary>
- public DatabaseParam()
- {
- DBType = 1;
- DBHost = "";
- DBPort = 3306;
- DBName = "";
- DBUser = "";
- DBPassword = "";
- }
- /// <summary>
- /// 指定数据库类型、主机、端口、数据库名、登录名和密码
- /// </summary>
- /// <param name="db_type">数据库类型</param>
- /// <param name="db_host">主机</param>
- /// <param name="db_port">端口</param>
- /// <param name="db_name">数据库名</param>
- /// <param name="db_user">登录名</param>
- /// <param name="db_pass">密码</param>
- public DatabaseParam(int db_type,string db_host, int db_port,string db_name, string db_user,string db_pass)
- {
- DBType = db_type;
- DBHost = db_host;
- DBPort = db_port;
- DBName = db_name;
- DBUser = db_user;
- DBPassword = db_pass;
- }
- /// <summary>
- /// 指定数据库类型、主机、数据库名、登录名和密码,端口根据数据库类型默认指定
- /// </summary>
- /// <param name="db_type">数据库类型</param>
- /// <param name="db_host">主机</param>
- /// <param name="db_name">数据库名</param>
- /// <param name="db_user">登录名</param>
- /// <param name="db_pass">密码</param>
- public DatabaseParam(int db_type,string db_host, string db_name,string db_user, string db_pass)
- {
- DBType = db_type;
- DBHost = db_host;
- switch (db_type)
- {
- case 1:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL;
- break;
- case 2:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MSSQL;
- break;
- case 3:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_ORACLE;
- break;
- case 4:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_SYBASE;
- break;
- case 5:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_DB2;
- break;
- default:
- DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL;
- break;
- }
- DBName = db_name;
- DBUser = db_user;
- DBPassword = db_pass;
- }
- /// <summary>
- /// 指定参数数组
- /// </summary>
- /// <param name="db_params">
- /// 0:数据库类型
- /// 1:数据库服务器地址
- /// 2:端口
- /// 3:数据库名
- /// 4:登录名
- /// 5:密码
- /// </param>
- public DatabaseParam(string[] db_params)
- {
- int db_type, db_port;
- DBType = int.TryParse(db_params[0],out db_type) == true ? db_type : 1;
- DBHost = db_params[1];
- DBPort = int.TryParse(db_params[2],out db_port) == true ? db_type : 3306;
- DBName = db_params[3];
- DBUser = db_params[4];
- DBPassword = db_params[5];
- }
- }
/// <summary> /// 数据库参数 /// </summary> public class DatabaseParam { /// <summary> /// 数据库类型 /// 1:MySQL /// 2:SQL Server /// 3:Oracle /// 4:Sybase /// 5:DB2 /// </summary> public int DBType { get; set; } /// <summary> /// 数据库服务器地址 /// </summary> public string DBHost { get; set; } /// <summary> /// 端口 /// </summary> public int DBPort { get; set; } /// <summary> /// 数据库名 /// </summary> public string DBName { get; set; } /// <summary> /// 登录用户名 /// </summary> public string DBUser { get; set; } /// <summary> /// 登录密码 /// </summary> public string DBPassword { get; set; } /// <summary> /// 默认数据库参数 /// 数据库类型:MySQL /// 端口:3306 /// 其他为空 /// </summary> public DatabaseParam() { DBType = 1; DBHost = ""; DBPort = 3306; DBName = ""; DBUser = ""; DBPassword = ""; } /// <summary> /// 指定数据库类型、主机、端口、数据库名、登录名和密码 /// </summary> /// <param name="db_type">数据库类型</param> /// <param name="db_host">主机</param> /// <param name="db_port">端口</param> /// <param name="db_name">数据库名</param> /// <param name="db_user">登录名</param> /// <param name="db_pass">密码</param> public DatabaseParam(int db_type, string db_host, int db_port, string db_name, string db_user, string db_pass) { DBType = db_type; DBHost = db_host; DBPort = db_port; DBName = db_name; DBUser = db_user; DBPassword = db_pass; } /// <summary> /// 指定数据库类型、主机、数据库名、登录名和密码,端口根据数据库类型默认指定 /// </summary> /// <param name="db_type">数据库类型</param> /// <param name="db_host">主机</param> /// <param name="db_name">数据库名</param> /// <param name="db_user">登录名</param> /// <param name="db_pass">密码</param> public DatabaseParam(int db_type, string db_host, string db_name, string db_user, string db_pass) { DBType = db_type; DBHost = db_host; switch (db_type) { case 1: DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL; break; case 2: DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MSSQL; break; case 3: DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_ORACLE; break; case 4: DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_SYBASE; break; case 5: DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_DB2; break; default: DBPort = DatabaseDefinitions.DATABASE_DEFAULT_PORT_MYSQL; break; } DBName = db_name; DBUser = db_user; DBPassword = db_pass; } /// <summary> /// 指定参数数组 /// </summary> /// <param name="db_params"> /// 0:数据库类型 /// 1:数据库服务器地址 /// 2:端口 /// 3:数据库名 /// 4:登录名 /// 5:密码 /// </param> public DatabaseParam(string[] db_params) { int db_type, db_port; DBType = int.TryParse(db_params[0], out db_type) == true ? db_type : 1; DBHost = db_params[1]; DBPort = int.TryParse(db_params[2], out db_port) == true ? db_type : 3306; DBName = db_params[3]; DBUser = db_params[4]; DBPassword = db_params[5]; } }
DatabaseAsyncState:
- /// <summary>
- /// 异步执行状态
- /// </summary>
- public class DatabaseAsyncState
- {
- /// <summary>
- /// IDbCommand对象
- /// </summary>
- public IDbCommand DbCommand {get; set; }
- /// <summary>
- /// IDataReader对象
- /// </summary>
- public IDataReader DataReader {get; set; }
- }
- /// <summary>
- /// 异步执行状态
- /// </summary>
- public class DatabaseAsyncState
- {
- /// <summary>
- /// IDbCommand对象
- /// </summary>
- public IDbCommand DbCommand {get; set; }
- /// <summary>
- /// IDataReader对象
- /// </summary>
- public IDataReader DataReader {get; set; }
- }
/// <summary> /// 异步执行状态 /// </summary> public class DatabaseAsyncState { /// <summary> /// IDbCommand对象 /// </summary> public IDbCommand DbCommand { get; set; } /// <summary> /// IDataReader对象 /// </summary> public IDataReader DataReader { get; set; } }
DataBaseAccess:
- /// <summary>
- /// 访问数据库,提供连接、查询、执行SQL等数据库访问功能
- /// author:Charley
- /// date:2012/4/30
- /// </summary>
- public class DataBaseAccess
- {
- private DatabaseParam m_databaseparam;
- /// <summary>
- /// 获取或设置数据库参数
- /// </summary>
- public DatabaseParam DatabaseParam
- {
- get { return m_databaseparam; }
- set { m_databaseparam = value; }
- }
- private string m_errormsg;
- /// <summary>
- /// 获取内部操作操作错误信息,得到上一步操作的错误消息
- /// </summary>
- public string ErrorMsg
- {
- get { return m_errormsg; }
- }
- private string m_connectionstring;
- /// <summary>
- /// 获取或设置数据库连接字符串
- /// </summary>
- public string ConnectionString
- {
- get { return m_connectionstring; }
- set { m_connectionstring = value; }
- }
- private AccessType m_accessType;
- /// <summary>
- /// 设置数据库访问方式
- /// </summary>
- public AccessType AccessType
- {
- set { m_accessType = value; }
- }
- private string m_providername;
- /// <summary>
- /// 设置数据提供者名称,用于ODBC连接
- /// </summary>
- public string ProviderName
- {
- //get { return m_providername; }
- set { m_providername = value; }
- }
- private int m_commandtimeout;
- /// <summary>
- /// 设置命令执行的超时时间,0:不限制,即采用数据库默认值
- /// </summary>
- public int CommandTimeout
- {
- set { m_commandtimeout = value; }
- }
- private int m_connectiontimeout;
- /// <summary>
- /// 设置数据库连接超时时间,0:不限制,即采用数据库默认值
- /// </summary>
- public int ConnectionTimeout
- {
- set { m_connectiontimeout = value; }
- }
- /// <summary>
- ///使用默认值构造
- /// </summary>
- public DataBaseAccess()
- {
- m_databaseparam = new DatabaseParam();
- m_accessType = AccessType.MySQLClient;
- m_errormsg = string.Empty;
- m_connectionstring = string.Empty;
- m_providername = string.Empty;
- m_commandtimeout = 0;
- m_connectiontimeout = 0;
- }
- /// <summary>
- /// 指定数据库参数构造
- /// </summary>
- /// <param name="database_param">数据库参数</param>
- public DataBaseAccess(DatabaseParam database_param)
- : this()
- {
- m_databaseparam = database_param;
- }
- /// <summary>
- /// 指定数据库参数及数据库访问类型构造
- /// </summary>
- /// <param name="database_param">数据库参数</param>
- /// <param name="access_type">数据库访问类型</param>
- public DataBaseAccess(DatabaseParam database_param, AccessType access_type)
- : this()
- {
- m_databaseparam = database_param;
- m_accessType = access_type;
- }
- /// <summary>
- /// 清除内部错误消息
- /// </summary>
- public void ClearMessage()
- {
- m_errormsg = string.Empty;
- }
- /// <summary>
- /// 测试数据库连接
- /// 连接成功:true
- /// 连接失败:False
- /// </summary>
- /// <returns></returns>
- public bool TestConnection()
- {
- bool b_return = false;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_connection = GetDBConnection();
- obj_connection.ConnectionString = m_connectionstring;
- try
- {
- obj_connection.Open();
- b_return = true;
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- }
- finally
- {
- if (obj_connection.State == ConnectionState.Open)
- {
- obj_connection.Close();
- }
- }
- return b_return;
- }
- /// <summary>
- /// 获取记录行数
- /// 返回 -1 指示操作有错误
- /// </summary>
- /// <param name="str_sql">查询语句</param>
- /// <returns></returns>
- public int GetRecordNum(string str_sql)
- {
- DataSet obj_ds = GetDataSet(str_sql);
- if (obj_ds == null || obj_ds.Tables.Count <= 0)
- {
- return -1;
- }
- return obj_ds.Tables[0].Rows.Count;
- }
- /// <summary>
- /// 获取指定列的值
- /// 返回 DATABASE_RETURN_ERROR 指示操作有错误
- /// </summary>
- /// <param name="str_sql">查询语句</param>
- /// <param name="column_name">列名</param>
- /// <returns></returns>
- public string GetStringValue(string column_name,string str_sql)
- {
- string s_return =string.Empty;
- DataRow obj_dr = GetFirstRecord(str_sql);
- if (obj_dr == null)
- {
- s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR;
- return s_return;
- }
- try
- {
- s_return = obj_dr[column_name].ToString();
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR;
- return s_return;
- }
- return s_return;
- }
- /// <summary>
- /// 获取第一条记录
- /// 返回 null 指示操作有错误
- /// </summary>
- /// <param name="str_sql">查询语句</param>
- /// <returns></returns>
- public DataRow GetFirstRecord(string str_sql)
- {
- DataSet obj_ds = GetDataSet(str_sql);
- if (obj_ds == null || obj_ds.Tables.Count <= 0)
- {
- return null;
- }
- int count = obj_ds.Tables[0].Rows.Count;
- if (count == 0)
- {
- m_errormsg = "No Record.";
- return null;
- }
- return obj_ds.Tables[0].Rows[0];
- }
- /// <summary>
- /// 获取数据集
- /// 返回 null 指示操作有错误
- /// </summary>
- /// <param name="str_sql">查询语句</param>
- /// <returns></returns>
- public DataSet GetDataSet(string str_sql)
- {
- DataSet obj_ds = new DataSet();
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDataAdapter obj_dapt = GetDataAdapter(str_sql);
- try
- {
- obj_dapt.Fill(obj_ds);
- if (obj_ds.Tables.Count <= 0)
- {
- m_errormsg = "No table.";
- obj_ds = null;
- }
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- obj_ds = null;
- }
- return obj_ds;
- }
- /// <summary>
- /// 执行SQL命令,返回受影响的行数
- /// 返回 -2 指示操作有错误
- /// 返回 -1 指示执行DDL命令
- /// </summary>
- /// <param name="str_sql">SQL命令</param>
- /// <returns></returns>
- public int ExecuteCommand(string str_sql)
- {
- int i_return = -2;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_con = GetDBConnection();
- obj_con.ConnectionString = m_connectionstring;
- IDbCommand obj_cmd = GetDBCommand();
- try
- {
- obj_con.Open();
- obj_cmd.Connection = obj_con;
- obj_cmd.CommandText = str_sql;
- return obj_cmd.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- i_return = -2;
- }
- finally
- {
- if (obj_con.State == ConnectionState.Open)
- {
- obj_con.Close();
- }
- }
- return i_return;
- }
- /// <summary>
- /// 执行存储过程
- /// </summary>
- /// <typeparam name="T">DataParameter参数类型,实现IDataParameter接口</typeparam>
- /// <param name="proc_name">存储过程名称</param>
- /// <param name="parameters">参数列表</param>
- /// <returns></returns>
- public bool ExecuteProcedure<T>(string proc_name,ref T[] parameters) where T : IDataParameter
- {
- bool b_return = false;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_con = GetDBConnection();
- obj_con.ConnectionString = m_connectionstring;
- try
- {
- obj_con.Open();
- IDbCommand obj_cmd = GetDBCommand();
- obj_cmd.Connection = obj_con;
- obj_cmd.CommandType = CommandType.StoredProcedure;
- obj_cmd.CommandText = proc_name;
- foreach (T parameterin parameters)
- {
- obj_cmd.Parameters.Add(parameter);
- }
- obj_cmd.ExecuteNonQuery();
- b_return = true;
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- b_return = false;
- }
- finally
- {
- if (obj_con.State == ConnectionState.Open)
- {
- obj_con.Close();
- }
- }
- return b_return;
- }
- /// <summary>
- /// 执行SQL命令,返回数据读取器DataReader
- /// </summary>
- /// <param name="str_sql">SQL命令</param>
- /// <returns></returns>
- public IDataReader ExecuteReader(string str_sql)
- {
- IDataReader obj_dr;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_con = GetDBConnection();
- obj_con.ConnectionString = m_connectionstring;
- try
- {
- obj_con.Open();
- IDbCommand obj_cmd = GetDBCommand();
- obj_cmd.Connection = obj_con;
- obj_cmd.CommandText = str_sql;
- obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection);
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- obj_dr = null;
- }
- return obj_dr;
- }
- /// <summary>
- /// 异步执行Sql查询
- /// </summary>
- /// <param name="str_sql">sql查询</param>
- /// <param name="callback">回调函数,包含DatabaseAsyncState</param>
- /// <returns></returns>
- public bool BeginExecuteReader(string str_sql, Action<object> callback)
- {
- IDataReader obj_dr;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_con = GetDBConnection();
- obj_con.ConnectionString = m_connectionstring;
- try
- {
- obj_con.Open();
- IDbCommand obj_cmd = GetDBCommand();
- obj_cmd.Connection = obj_con;
- obj_cmd.CommandText = str_sql;
- obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection);
- DatabaseAsyncState async_state = new DatabaseAsyncState();
- async_state.DbCommand = obj_cmd;
- async_state.DataReader = obj_dr;
- System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(callback));
- thread.Start(async_state);
- return true;
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- return false;
- }
- }
- /// <summary>
- /// 试图取消IDbCommand的执行
- /// </summary>
- /// <param name="command">ICommand对象</param>
- public void Cancel(IDbCommand command)
- {
- command.Cancel();
- }
- /// <summary>
- /// 根据数据库访问方式构造数据库连接字符串
- /// </summary>
- public void BuildConnectionString()
- {
- switch (m_accessType)
- {
- case AccessType.MySQLClient:
- m_connectionstring = "Server=" + m_databaseparam.DBHost +";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword +";";
- if (m_commandtimeout > 0)
- {
- m_connectionstring += "Default command timeout=" + m_commandtimeout.ToString() +";";
- }
- if (m_connectiontimeout > 0)
- {
- m_connectionstring += "Connection timeout=" + m_connectiontimeout +";";
- }
- break;
- case AccessType.MSSQLClient:
- m_connectionstring = "Data Source=" + m_databaseparam.DBHost +"," + m_databaseparam.DBPort + ";Initial Catalog=" + m_databaseparam.DBName +";User ID=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.OracleDirect:
- m_connectionstring = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + m_databaseparam.DBHost +")(PORT=" + m_databaseparam.DBPort + ")))(CONNECT_DATA=(SERVICE_NAME=" + m_databaseparam.DBName +")));User Id=" + m_databaseparam.DBUser +";Password=" + m_databaseparam.DBPassword +";";
- break;
- case AccessType.OracleTNS:
- m_connectionstring = "Data Source=" + m_databaseparam.DBName +";User Id=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.IBMDataDB2:
- m_connectionstring = "Server=" + m_databaseparam.DBHost +":" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";userid=" + m_databaseparam.DBUser + ";password=" + m_databaseparam.DBPassword+";";
- break;
- case AccessType.MySQLODBC:
- m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.MSSQLODBC:
- m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.MSOracleODBC:
- m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword +";";
- break;
- case AccessType.OracleODBC:
- m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Dbq=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser +";Pwd=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.DB2ODBC:
- m_connectionstring = "DRIVER={"+m_providername+"};UID=" + m_databaseparam.DBUser +";PWD=" + m_databaseparam.DBPassword + ";PROTOCOL=TCPIP;HOSTNAME=" + m_databaseparam.DBHost +";DATABASE=" + m_databaseparam.DBName + ";PORT=" + m_databaseparam.DBPort + ";";
- break;
- default:
- m_errormsg = "Access type not support.";
- break;
- }
- }
- private IDbConnection GetDBConnection()
- {
- switch (m_accessType)
- {
- case AccessType.MySQLClient:
- MySqlConnection mysql_connection = new MySqlConnection();
- return mysql_connection;
- case AccessType.MSSQLClient:
- SqlConnection mssql_connection = new SqlConnection();
- return mssql_connection;
- case AccessType.OracleDirect:
- case AccessType.OracleTNS:
- OracleConnection oracle_connection = new OracleConnection();
- return oracle_connection;
- case AccessType.IBMDataDB2:
- DB2Connection db2_connection = new DB2Connection();
- return db2_connection;
- case AccessType.MySQLODBC:
- case AccessType.MSSQLODBC:
- case AccessType.OracleODBC:
- case AccessType.MSOracleODBC:
- case AccessType.DB2ODBC:
- OdbcConnection odbc_connection = new OdbcConnection();
- return odbc_connection;
- default:
- m_errormsg = "Access type not support.";
- return null;
- }
- }
- private IDataAdapter GetDataAdapter(string str_sql)
- {
- switch (m_accessType)
- {
- case AccessType.MySQLClient:
- MySqlConnection mysql_connection = new MySqlConnection(m_connectionstring);
- MySqlDataAdapter mysql_dapt = new MySqlDataAdapter(str_sql, mysql_connection);
- return mysql_dapt;
- case AccessType.MSSQLClient:
- SqlConnection mssql_connection = new SqlConnection(m_connectionstring);
- SqlDataAdapter mssql_dapt = new SqlDataAdapter(str_sql, mssql_connection);
- return mssql_dapt;
- case AccessType.OracleDirect:
- case AccessType.OracleTNS:
- OracleConnection oracle_connection = new OracleConnection(m_connectionstring);
- OracleDataAdapter oracle_dapt = new OracleDataAdapter(str_sql, oracle_connection);
- return oracle_dapt;
- case AccessType.IBMDataDB2:
- DB2Connection db2_connection = new DB2Connection(m_connectionstring);
- DB2DataAdapter db2_dapt = new DB2DataAdapter(str_sql, db2_connection);
- return db2_dapt;
- case AccessType.MySQLODBC:
- case AccessType.MSSQLODBC:
- case AccessType.OracleODBC:
- case AccessType.MSOracleODBC:
- case AccessType.DB2ODBC:
- OdbcConnection odbc_connection = new OdbcConnection(m_connectionstring);
- OdbcDataAdapter odbc_dapt = new OdbcDataAdapter(str_sql, odbc_connection);
- return odbc_dapt;
- default:
- m_errormsg = "Access type not support.";
- return null;
- }
- }
- private IDbCommand GetDBCommand()
- {
- switch (m_accessType)
- {
- case AccessType.MySQLClient:
- MySqlCommand mysql_cmd = new MySqlCommand();
- return mysql_cmd;
- case AccessType.MSSQLClient:
- SqlCommand mssql_cmd = new SqlCommand();
- return mssql_cmd;
- case AccessType.OracleDirect:
- case AccessType.OracleTNS:
- OracleCommand oracle_cmd = new OracleCommand();
- return oracle_cmd;
- case AccessType.IBMDataDB2:
- DB2Command db2_cmd = new DB2Command();
- return db2_cmd;
- case AccessType.MySQLODBC:
- case AccessType.MSSQLODBC:
- case AccessType.OracleODBC:
- case AccessType.MSOracleODBC:
- case AccessType.DB2ODBC:
- OdbcCommand odbc_cmd = new OdbcCommand();
- return odbc_cmd;
- default:
- m_errormsg = "Access type not support.";
- return null;
- }
- }
- }
- /// <summary>
- /// 访问数据库,提供连接、查询、执行SQL等数据库访问功能
- /// author:Charley
- /// date:2012/4/30
- /// </summary>
- public class DataBaseAccess
- {
- private DatabaseParam m_databaseparam;
- /// <summary>
- /// 获取或设置数据库参数
- /// </summary>
- public DatabaseParam DatabaseParam
- {
- get { return m_databaseparam; }
- set { m_databaseparam = value; }
- }
- private string m_errormsg;
- /// <summary>
- /// 获取内部操作操作错误信息,得到上一步操作的错误消息
- /// </summary>
- public string ErrorMsg
- {
- get { return m_errormsg; }
- }
- private string m_connectionstring;
- /// <summary>
- /// 获取或设置数据库连接字符串
- /// </summary>
- public string ConnectionString
- {
- get { return m_connectionstring; }
- set { m_connectionstring = value; }
- }
- private AccessType m_accessType;
- /// <summary>
- /// 设置数据库访问方式
- /// </summary>
- public AccessType AccessType
- {
- set { m_accessType = value; }
- }
- private string m_providername;
- /// <summary>
- /// 设置数据提供者名称,用于ODBC连接
- /// </summary>
- public string ProviderName
- {
- //get { return m_providername; }
- set { m_providername = value; }
- }
- private int m_commandtimeout;
- /// <summary>
- /// 设置命令执行的超时时间,0:不限制,即采用数据库默认值
- /// </summary>
- public int CommandTimeout
- {
- set { m_commandtimeout = value; }
- }
- private int m_connectiontimeout;
- /// <summary>
- /// 设置数据库连接超时时间,0:不限制,即采用数据库默认值
- /// </summary>
- public int ConnectionTimeout
- {
- set { m_connectiontimeout = value; }
- }
- /// <summary>
- ///使用默认值构造
- /// </summary>
- public DataBaseAccess()
- {
- m_databaseparam = new DatabaseParam();
- m_accessType = AccessType.MySQLClient;
- m_errormsg = string.Empty;
- m_connectionstring = string.Empty;
- m_providername = string.Empty;
- m_commandtimeout = 0;
- m_connectiontimeout = 0;
- }
- /// <summary>
- /// 指定数据库参数构造
- /// </summary>
- /// <param name="database_param">数据库参数</param>
- public DataBaseAccess(DatabaseParam database_param)
- : this()
- {
- m_databaseparam = database_param;
- }
- /// <summary>
- /// 指定数据库参数及数据库访问类型构造
- /// </summary>
- /// <param name="database_param">数据库参数</param>
- /// <param name="access_type">数据库访问类型</param>
- public DataBaseAccess(DatabaseParam database_param, AccessType access_type)
- : this()
- {
- m_databaseparam = database_param;
- m_accessType = access_type;
- }
- /// <summary>
- /// 清除内部错误消息
- /// </summary>
- public void ClearMessage()
- {
- m_errormsg = string.Empty;
- }
- /// <summary>
- /// 测试数据库连接
- /// 连接成功:true
- /// 连接失败:False
- /// </summary>
- /// <returns></returns>
- public bool TestConnection()
- {
- bool b_return = false;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_connection = GetDBConnection();
- obj_connection.ConnectionString = m_connectionstring;
- try
- {
- obj_connection.Open();
- b_return = true;
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- }
- finally
- {
- if (obj_connection.State == ConnectionState.Open)
- {
- obj_connection.Close();
- }
- }
- return b_return;
- }
- /// <summary>
- /// 获取记录行数
- /// 返回 -1 指示操作有错误
- /// </summary>
- /// <param name="str_sql">查询语句</param>
- /// <returns></returns>
- public int GetRecordNum(string str_sql)
- {
- DataSet obj_ds = GetDataSet(str_sql);
- if (obj_ds == null || obj_ds.Tables.Count <= 0)
- {
- return -1;
- }
- return obj_ds.Tables[0].Rows.Count;
- }
- /// <summary>
- /// 获取指定列的值
- /// 返回 DATABASE_RETURN_ERROR 指示操作有错误
- /// </summary>
- /// <param name="str_sql">查询语句</param>
- /// <param name="column_name">列名</param>
- /// <returns></returns>
- public string GetStringValue(string column_name,string str_sql)
- {
- string s_return =string.Empty;
- DataRow obj_dr = GetFirstRecord(str_sql);
- if (obj_dr == null)
- {
- s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR;
- return s_return;
- }
- try
- {
- s_return = obj_dr[column_name].ToString();
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR;
- return s_return;
- }
- return s_return;
- }
- /// <summary>
- /// 获取第一条记录
- /// 返回 null 指示操作有错误
- /// </summary>
- /// <param name="str_sql">查询语句</param>
- /// <returns></returns>
- public DataRow GetFirstRecord(string str_sql)
- {
- DataSet obj_ds = GetDataSet(str_sql);
- if (obj_ds == null || obj_ds.Tables.Count <= 0)
- {
- return null;
- }
- int count = obj_ds.Tables[0].Rows.Count;
- if (count == 0)
- {
- m_errormsg = "No Record.";
- return null;
- }
- return obj_ds.Tables[0].Rows[0];
- }
- /// <summary>
- /// 获取数据集
- /// 返回 null 指示操作有错误
- /// </summary>
- /// <param name="str_sql">查询语句</param>
- /// <returns></returns>
- public DataSet GetDataSet(string str_sql)
- {
- DataSet obj_ds = new DataSet();
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDataAdapter obj_dapt = GetDataAdapter(str_sql);
- try
- {
- obj_dapt.Fill(obj_ds);
- if (obj_ds.Tables.Count <= 0)
- {
- m_errormsg = "No table.";
- obj_ds = null;
- }
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- obj_ds = null;
- }
- return obj_ds;
- }
- /// <summary>
- /// 执行SQL命令,返回受影响的行数
- /// 返回 -2 指示操作有错误
- /// 返回 -1 指示执行DDL命令
- /// </summary>
- /// <param name="str_sql">SQL命令</param>
- /// <returns></returns>
- public int ExecuteCommand(string str_sql)
- {
- int i_return = -2;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_con = GetDBConnection();
- obj_con.ConnectionString = m_connectionstring;
- IDbCommand obj_cmd = GetDBCommand();
- try
- {
- obj_con.Open();
- obj_cmd.Connection = obj_con;
- obj_cmd.CommandText = str_sql;
- return obj_cmd.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- i_return = -2;
- }
- finally
- {
- if (obj_con.State == ConnectionState.Open)
- {
- obj_con.Close();
- }
- }
- return i_return;
- }
- /// <summary>
- /// 执行存储过程
- /// </summary>
- /// <typeparam name="T">DataParameter参数类型,实现IDataParameter接口</typeparam>
- /// <param name="proc_name">存储过程名称</param>
- /// <param name="parameters">参数列表</param>
- /// <returns></returns>
- public bool ExecuteProcedure<T>(string proc_name,ref T[] parameters) where T : IDataParameter
- {
- bool b_return = false;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_con = GetDBConnection();
- obj_con.ConnectionString = m_connectionstring;
- try
- {
- obj_con.Open();
- IDbCommand obj_cmd = GetDBCommand();
- obj_cmd.Connection = obj_con;
- obj_cmd.CommandType = CommandType.StoredProcedure;
- obj_cmd.CommandText = proc_name;
- foreach (T parameterin parameters)
- {
- obj_cmd.Parameters.Add(parameter);
- }
- obj_cmd.ExecuteNonQuery();
- b_return = true;
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- b_return = false;
- }
- finally
- {
- if (obj_con.State == ConnectionState.Open)
- {
- obj_con.Close();
- }
- }
- return b_return;
- }
- /// <summary>
- /// 执行SQL命令,返回数据读取器DataReader
- /// </summary>
- /// <param name="str_sql">SQL命令</param>
- /// <returns></returns>
- public IDataReader ExecuteReader(string str_sql)
- {
- IDataReader obj_dr;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_con = GetDBConnection();
- obj_con.ConnectionString = m_connectionstring;
- try
- {
- obj_con.Open();
- IDbCommand obj_cmd = GetDBCommand();
- obj_cmd.Connection = obj_con;
- obj_cmd.CommandText = str_sql;
- obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection);
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- obj_dr = null;
- }
- return obj_dr;
- }
- /// <summary>
- /// 异步执行Sql查询
- /// </summary>
- /// <param name="str_sql">sql查询</param>
- /// <param name="callback">回调函数,包含DatabaseAsyncState</param>
- /// <returns></returns>
- public bool BeginExecuteReader(string str_sql, Action<object> callback)
- {
- IDataReader obj_dr;
- if (m_connectionstring.Equals(string.Empty))
- {
- BuildConnectionString();
- }
- IDbConnection obj_con = GetDBConnection();
- obj_con.ConnectionString = m_connectionstring;
- try
- {
- obj_con.Open();
- IDbCommand obj_cmd = GetDBCommand();
- obj_cmd.Connection = obj_con;
- obj_cmd.CommandText = str_sql;
- obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection);
- DatabaseAsyncState async_state = new DatabaseAsyncState();
- async_state.DbCommand = obj_cmd;
- async_state.DataReader = obj_dr;
- System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(callback));
- thread.Start(async_state);
- return true;
- }
- catch (Exception ex)
- {
- m_errormsg = ex.ToString();
- return false;
- }
- }
- /// <summary>
- /// 试图取消IDbCommand的执行
- /// </summary>
- /// <param name="command">ICommand对象</param>
- public void Cancel(IDbCommand command)
- {
- command.Cancel();
- }
- /// <summary>
- /// 根据数据库访问方式构造数据库连接字符串
- /// </summary>
- public void BuildConnectionString()
- {
- switch (m_accessType)
- {
- case AccessType.MySQLClient:
- m_connectionstring = "Server=" + m_databaseparam.DBHost +";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword +";";
- if (m_commandtimeout > 0)
- {
- m_connectionstring += "Default command timeout=" + m_commandtimeout.ToString() +";";
- }
- if (m_connectiontimeout > 0)
- {
- m_connectionstring += "Connection timeout=" + m_connectiontimeout +";";
- }
- break;
- case AccessType.MSSQLClient:
- m_connectionstring = "Data Source=" + m_databaseparam.DBHost +"," + m_databaseparam.DBPort + ";Initial Catalog=" + m_databaseparam.DBName +";User ID=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.OracleDirect:
- m_connectionstring = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + m_databaseparam.DBHost +")(PORT=" + m_databaseparam.DBPort + ")))(CONNECT_DATA=(SERVICE_NAME=" + m_databaseparam.DBName +")));User Id=" + m_databaseparam.DBUser +";Password=" + m_databaseparam.DBPassword +";";
- break;
- case AccessType.OracleTNS:
- m_connectionstring = "Data Source=" + m_databaseparam.DBName +";User Id=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.IBMDataDB2:
- m_connectionstring = "Server=" + m_databaseparam.DBHost +":" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";userid=" + m_databaseparam.DBUser + ";password=" + m_databaseparam.DBPassword+";";
- break;
- case AccessType.MySQLODBC:
- m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.MSSQLODBC:
- m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName +";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.MSOracleODBC:
- m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword +";";
- break;
- case AccessType.OracleODBC:
- m_connectionstring = "Driver={" + m_providername +"};Server=" + m_databaseparam.DBHost + ";Dbq=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser +";Pwd=" + m_databaseparam.DBPassword + ";";
- break;
- case AccessType.DB2ODBC:
- m_connectionstring = "DRIVER={"+m_providername+"};UID=" + m_databaseparam.DBUser +";PWD=" + m_databaseparam.DBPassword + ";PROTOCOL=TCPIP;HOSTNAME=" + m_databaseparam.DBHost +";DATABASE=" + m_databaseparam.DBName + ";PORT=" + m_databaseparam.DBPort + ";";
- break;
- default:
- m_errormsg = "Access type not support.";
- break;
- }
- }
- private IDbConnection GetDBConnection()
- {
- switch (m_accessType)
- {
- case AccessType.MySQLClient:
- MySqlConnection mysql_connection = new MySqlConnection();
- return mysql_connection;
- case AccessType.MSSQLClient:
- SqlConnection mssql_connection = new SqlConnection();
- return mssql_connection;
- case AccessType.OracleDirect:
- case AccessType.OracleTNS:
- OracleConnection oracle_connection = new OracleConnection();
- return oracle_connection;
- case AccessType.IBMDataDB2:
- DB2Connection db2_connection = new DB2Connection();
- return db2_connection;
- case AccessType.MySQLODBC:
- case AccessType.MSSQLODBC:
- case AccessType.OracleODBC:
- case AccessType.MSOracleODBC:
- case AccessType.DB2ODBC:
- OdbcConnection odbc_connection = new OdbcConnection();
- return odbc_connection;
- default:
- m_errormsg = "Access type not support.";
- return null;
- }
- }
- private IDataAdapter GetDataAdapter(string str_sql)
- {
- switch (m_accessType)
- {
- case AccessType.MySQLClient:
- MySqlConnection mysql_connection = new MySqlConnection(m_connectionstring);
- MySqlDataAdapter mysql_dapt = new MySqlDataAdapter(str_sql, mysql_connection);
- return mysql_dapt;
- case AccessType.MSSQLClient:
- SqlConnection mssql_connection = new SqlConnection(m_connectionstring);
- SqlDataAdapter mssql_dapt = new SqlDataAdapter(str_sql, mssql_connection);
- return mssql_dapt;
- case AccessType.OracleDirect:
- case AccessType.OracleTNS:
- OracleConnection oracle_connection = new OracleConnection(m_connectionstring);
- OracleDataAdapter oracle_dapt = new OracleDataAdapter(str_sql, oracle_connection);
- return oracle_dapt;
- case AccessType.IBMDataDB2:
- DB2Connection db2_connection = new DB2Connection(m_connectionstring);
- DB2DataAdapter db2_dapt = new DB2DataAdapter(str_sql, db2_connection);
- return db2_dapt;
- case AccessType.MySQLODBC:
- case AccessType.MSSQLODBC:
- case AccessType.OracleODBC:
- case AccessType.MSOracleODBC:
- case AccessType.DB2ODBC:
- OdbcConnection odbc_connection = new OdbcConnection(m_connectionstring);
- OdbcDataAdapter odbc_dapt = new OdbcDataAdapter(str_sql, odbc_connection);
- return odbc_dapt;
- default:
- m_errormsg = "Access type not support.";
- return null;
- }
- }
- private IDbCommand GetDBCommand()
- {
- switch (m_accessType)
- {
- case AccessType.MySQLClient:
- MySqlCommand mysql_cmd = new MySqlCommand();
- return mysql_cmd;
- case AccessType.MSSQLClient:
- SqlCommand mssql_cmd = new SqlCommand();
- return mssql_cmd;
- case AccessType.OracleDirect:
- case AccessType.OracleTNS:
- OracleCommand oracle_cmd = new OracleCommand();
- return oracle_cmd;
- case AccessType.IBMDataDB2:
- DB2Command db2_cmd = new DB2Command();
- return db2_cmd;
- case AccessType.MySQLODBC:
- case AccessType.MSSQLODBC:
- case AccessType.OracleODBC:
- case AccessType.MSOracleODBC:
- case AccessType.DB2ODBC:
- OdbcCommand odbc_cmd = new OdbcCommand();
- return odbc_cmd;
- default:
- m_errormsg = "Access type not support.";
- return null;
- }
- }
- }
/// <summary> /// 访问数据库,提供连接、查询、执行SQL等数据库访问功能 /// author:Charley /// date:2012/4/30 /// </summary> public class DataBaseAccess { private DatabaseParam m_databaseparam; /// <summary> /// 获取或设置数据库参数 /// </summary> public DatabaseParam DatabaseParam { get { return m_databaseparam; } set { m_databaseparam = value; } } private string m_errormsg; /// <summary> /// 获取内部操作操作错误信息,得到上一步操作的错误消息 /// </summary> public string ErrorMsg { get { return m_errormsg; } } private string m_connectionstring; /// <summary> /// 获取或设置数据库连接字符串 /// </summary> public string ConnectionString { get { return m_connectionstring; } set { m_connectionstring = value; } } private AccessType m_accessType; /// <summary> /// 设置数据库访问方式 /// </summary> public AccessType AccessType { set { m_accessType = value; } } private string m_providername; /// <summary> /// 设置数据提供者名称,用于ODBC连接 /// </summary> public string ProviderName { //get { return m_providername; } set { m_providername = value; } } private int m_commandtimeout; /// <summary> /// 设置命令执行的超时时间,0:不限制,即采用数据库默认值 /// </summary> public int CommandTimeout { set { m_commandtimeout = value; } } private int m_connectiontimeout; /// <summary> /// 设置数据库连接超时时间,0:不限制,即采用数据库默认值 /// </summary> public int ConnectionTimeout { set { m_connectiontimeout = value; } } /// <summary> ///使用默认值构造 /// </summary> public DataBaseAccess() { m_databaseparam = new DatabaseParam(); m_accessType = AccessType.MySQLClient; m_errormsg = string.Empty; m_connectionstring = string.Empty; m_providername = string.Empty; m_commandtimeout = 0; m_connectiontimeout = 0; } /// <summary> /// 指定数据库参数构造 /// </summary> /// <param name="database_param">数据库参数</param> public DataBaseAccess(DatabaseParam database_param) : this() { m_databaseparam = database_param; } /// <summary> /// 指定数据库参数及数据库访问类型构造 /// </summary> /// <param name="database_param">数据库参数</param> /// <param name="access_type">数据库访问类型</param> public DataBaseAccess(DatabaseParam database_param, AccessType access_type) : this() { m_databaseparam = database_param; m_accessType = access_type; } /// <summary> /// 清除内部错误消息 /// </summary> public void ClearMessage() { m_errormsg = string.Empty; } /// <summary> /// 测试数据库连接 /// 连接成功:true /// 连接失败:False /// </summary> /// <returns></returns> public bool TestConnection() { bool b_return = false; if (m_connectionstring.Equals(string.Empty)) { BuildConnectionString(); } IDbConnection obj_connection = GetDBConnection(); obj_connection.ConnectionString = m_connectionstring; try { obj_connection.Open(); b_return = true; } catch (Exception ex) { m_errormsg = ex.ToString(); } finally { if (obj_connection.State == ConnectionState.Open) { obj_connection.Close(); } } return b_return; } /// <summary> /// 获取记录行数 /// 返回 -1 指示操作有错误 /// </summary> /// <param name="str_sql">查询语句</param> /// <returns></returns> public int GetRecordNum(string str_sql) { DataSet obj_ds = GetDataSet(str_sql); if (obj_ds == null || obj_ds.Tables.Count <= 0) { return -1; } return obj_ds.Tables[0].Rows.Count; } /// <summary> /// 获取指定列的值 /// 返回 DATABASE_RETURN_ERROR 指示操作有错误 /// </summary> /// <param name="str_sql">查询语句</param> /// <param name="column_name">列名</param> /// <returns></returns> public string GetStringValue(string column_name, string str_sql) { string s_return = string.Empty; DataRow obj_dr = GetFirstRecord(str_sql); if (obj_dr == null) { s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR; return s_return; } try { s_return = obj_dr[column_name].ToString(); } catch (Exception ex) { m_errormsg = ex.ToString(); s_return = DatabaseDefinitions.DATABASE_RETURN_ERROR; return s_return; } return s_return; } /// <summary> /// 获取第一条记录 /// 返回 null 指示操作有错误 /// </summary> /// <param name="str_sql">查询语句</param> /// <returns></returns> public DataRow GetFirstRecord(string str_sql) { DataSet obj_ds = GetDataSet(str_sql); if (obj_ds == null || obj_ds.Tables.Count <= 0) { return null; } int count = obj_ds.Tables[0].Rows.Count; if (count == 0) { m_errormsg = "No Record."; return null; } return obj_ds.Tables[0].Rows[0]; } /// <summary> /// 获取数据集 /// 返回 null 指示操作有错误 /// </summary> /// <param name="str_sql">查询语句</param> /// <returns></returns> public DataSet GetDataSet(string str_sql) { DataSet obj_ds = new DataSet(); if (m_connectionstring.Equals(string.Empty)) { BuildConnectionString(); } IDataAdapter obj_dapt = GetDataAdapter(str_sql); try { obj_dapt.Fill(obj_ds); if (obj_ds.Tables.Count <= 0) { m_errormsg = "No table."; obj_ds = null; } } catch (Exception ex) { m_errormsg = ex.ToString(); obj_ds = null; } return obj_ds; } /// <summary> /// 执行SQL命令,返回受影响的行数 /// 返回 -2 指示操作有错误 /// 返回 -1 指示执行DDL命令 /// </summary> /// <param name="str_sql">SQL命令</param> /// <returns></returns> public int ExecuteCommand(string str_sql) { int i_return = -2; if (m_connectionstring.Equals(string.Empty)) { BuildConnectionString(); } IDbConnection obj_con = GetDBConnection(); obj_con.ConnectionString = m_connectionstring; IDbCommand obj_cmd = GetDBCommand(); try { obj_con.Open(); obj_cmd.Connection = obj_con; obj_cmd.CommandText = str_sql; return obj_cmd.ExecuteNonQuery(); } catch (Exception ex) { m_errormsg = ex.ToString(); i_return = -2; } finally { if (obj_con.State == ConnectionState.Open) { obj_con.Close(); } } return i_return; } /// <summary> /// 执行存储过程 /// </summary> /// <typeparam name="T">DataParameter参数类型,实现IDataParameter接口</typeparam> /// <param name="proc_name">存储过程名称</param> /// <param name="parameters">参数列表</param> /// <returns></returns> public bool ExecuteProcedure<T>(string proc_name, ref T[] parameters) where T : IDataParameter { bool b_return = false; if (m_connectionstring.Equals(string.Empty)) { BuildConnectionString(); } IDbConnection obj_con = GetDBConnection(); obj_con.ConnectionString = m_connectionstring; try { obj_con.Open(); IDbCommand obj_cmd = GetDBCommand(); obj_cmd.Connection = obj_con; obj_cmd.CommandType = CommandType.StoredProcedure; obj_cmd.CommandText = proc_name; foreach (T parameter in parameters) { obj_cmd.Parameters.Add(parameter); } obj_cmd.ExecuteNonQuery(); b_return = true; } catch (Exception ex) { m_errormsg = ex.ToString(); b_return = false; } finally { if (obj_con.State == ConnectionState.Open) { obj_con.Close(); } } return b_return; } /// <summary> /// 执行SQL命令,返回数据读取器DataReader /// </summary> /// <param name="str_sql">SQL命令</param> /// <returns></returns> public IDataReader ExecuteReader(string str_sql) { IDataReader obj_dr; if (m_connectionstring.Equals(string.Empty)) { BuildConnectionString(); } IDbConnection obj_con = GetDBConnection(); obj_con.ConnectionString = m_connectionstring; try { obj_con.Open(); IDbCommand obj_cmd = GetDBCommand(); obj_cmd.Connection = obj_con; obj_cmd.CommandText = str_sql; obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch (Exception ex) { m_errormsg = ex.ToString(); obj_dr = null; } return obj_dr; } /// <summary> /// 异步执行Sql查询 /// </summary> /// <param name="str_sql">sql查询</param> /// <param name="callback">回调函数,包含DatabaseAsyncState</param> /// <returns></returns> public bool BeginExecuteReader(string str_sql, Action<object> callback) { IDataReader obj_dr; if (m_connectionstring.Equals(string.Empty)) { BuildConnectionString(); } IDbConnection obj_con = GetDBConnection(); obj_con.ConnectionString = m_connectionstring; try { obj_con.Open(); IDbCommand obj_cmd = GetDBCommand(); obj_cmd.Connection = obj_con; obj_cmd.CommandText = str_sql; obj_dr = obj_cmd.ExecuteReader(CommandBehavior.CloseConnection); DatabaseAsyncState async_state = new DatabaseAsyncState(); async_state.DbCommand = obj_cmd; async_state.DataReader = obj_dr; System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(callback)); thread.Start(async_state); return true; } catch (Exception ex) { m_errormsg = ex.ToString(); return false; } } /// <summary> /// 试图取消IDbCommand的执行 /// </summary> /// <param name="command">ICommand对象</param> public void Cancel(IDbCommand command) { command.Cancel(); } /// <summary> /// 根据数据库访问方式构造数据库连接字符串 /// </summary> public void BuildConnectionString() { switch (m_accessType) { case AccessType.MySQLClient: m_connectionstring = "Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";"; if (m_commandtimeout > 0) { m_connectionstring += "Default command timeout=" + m_commandtimeout.ToString() + ";"; } if (m_connectiontimeout > 0) { m_connectionstring += "Connection timeout=" + m_connectiontimeout + ";"; } break; case AccessType.MSSQLClient: m_connectionstring = "Data Source=" + m_databaseparam.DBHost + "," + m_databaseparam.DBPort + ";Initial Catalog=" + m_databaseparam.DBName + ";User ID=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";"; break; case AccessType.OracleDirect: m_connectionstring = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + m_databaseparam.DBHost + ")(PORT=" + m_databaseparam.DBPort + ")))(CONNECT_DATA=(SERVICE_NAME=" + m_databaseparam.DBName + ")));User Id=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";"; break; case AccessType.OracleTNS: m_connectionstring = "Data Source=" + m_databaseparam.DBName + ";User Id=" + m_databaseparam.DBUser + ";Password=" + m_databaseparam.DBPassword + ";"; break; case AccessType.IBMDataDB2: m_connectionstring = "Server=" + m_databaseparam.DBHost + ":" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName + ";userid=" + m_databaseparam.DBUser + ";password=" + m_databaseparam.DBPassword+";"; break; case AccessType.MySQLODBC: m_connectionstring = "Driver={" + m_providername + "};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";"; break; case AccessType.MSSQLODBC: m_connectionstring = "Driver={" + m_providername + "};Server=" + m_databaseparam.DBHost + ";Port=" + m_databaseparam.DBPort + ";Database=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";"; break; case AccessType.MSOracleODBC: m_connectionstring = "Driver={" + m_providername + "};Server=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";"; break; case AccessType.OracleODBC: m_connectionstring = "Driver={" + m_providername + "};Server=" + m_databaseparam.DBHost + ";Dbq=" + m_databaseparam.DBName + ";Uid=" + m_databaseparam.DBUser + ";Pwd=" + m_databaseparam.DBPassword + ";"; break; case AccessType.DB2ODBC: m_connectionstring = "DRIVER={"+m_providername+"};UID=" + m_databaseparam.DBUser + ";PWD=" + m_databaseparam.DBPassword + ";PROTOCOL=TCPIP;HOSTNAME=" + m_databaseparam.DBHost + ";DATABASE=" + m_databaseparam.DBName + ";PORT=" + m_databaseparam.DBPort + ";"; break; default: m_errormsg = "Access type not support."; break; } } private IDbConnection GetDBConnection() { switch (m_accessType) { case AccessType.MySQLClient: MySqlConnection mysql_connection = new MySqlConnection(); return mysql_connection; case AccessType.MSSQLClient: SqlConnection mssql_connection = new SqlConnection(); return mssql_connection; case AccessType.OracleDirect: case AccessType.OracleTNS: OracleConnection oracle_connection = new OracleConnection(); return oracle_connection; case AccessType.IBMDataDB2: DB2Connection db2_connection = new DB2Connection(); return db2_connection; case AccessType.MySQLODBC: case AccessType.MSSQLODBC: case AccessType.OracleODBC: case AccessType.MSOracleODBC: case AccessType.DB2ODBC: OdbcConnection odbc_connection = new OdbcConnection(); return odbc_connection; default: m_errormsg = "Access type not support."; return null; } } private IDataAdapter GetDataAdapter(string str_sql) { switch (m_accessType) { case AccessType.MySQLClient: MySqlConnection mysql_connection = new MySqlConnection(m_connectionstring); MySqlDataAdapter mysql_dapt = new MySqlDataAdapter(str_sql, mysql_connection); return mysql_dapt; case AccessType.MSSQLClient: SqlConnection mssql_connection = new SqlConnection(m_connectionstring); SqlDataAdapter mssql_dapt = new SqlDataAdapter(str_sql, mssql_connection); return mssql_dapt; case AccessType.OracleDirect: case AccessType.OracleTNS: OracleConnection oracle_connection = new OracleConnection(m_connectionstring); OracleDataAdapter oracle_dapt = new OracleDataAdapter(str_sql, oracle_connection); return oracle_dapt; case AccessType.IBMDataDB2: DB2Connection db2_connection = new DB2Connection(m_connectionstring); DB2DataAdapter db2_dapt = new DB2DataAdapter(str_sql, db2_connection); return db2_dapt; case AccessType.MySQLODBC: case AccessType.MSSQLODBC: case AccessType.OracleODBC: case AccessType.MSOracleODBC: case AccessType.DB2ODBC: OdbcConnection odbc_connection = new OdbcConnection(m_connectionstring); OdbcDataAdapter odbc_dapt = new OdbcDataAdapter(str_sql, odbc_connection); return odbc_dapt; default: m_errormsg = "Access type not support."; return null; } } private IDbCommand GetDBCommand() { switch (m_accessType) { case AccessType.MySQLClient: MySqlCommand mysql_cmd = new MySqlCommand(); return mysql_cmd; case AccessType.MSSQLClient: SqlCommand mssql_cmd = new SqlCommand(); return mssql_cmd; case AccessType.OracleDirect: case AccessType.OracleTNS: OracleCommand oracle_cmd = new OracleCommand(); return oracle_cmd; case AccessType.IBMDataDB2: DB2Command db2_cmd = new DB2Command(); return db2_cmd; case AccessType.MySQLODBC: case AccessType.MSSQLODBC: case AccessType.OracleODBC: case AccessType.MSOracleODBC: case AccessType.DB2ODBC: OdbcCommand odbc_cmd = new OdbcCommand(); return odbc_cmd; default: m_errormsg = "Access type not support."; return null; } } }
使用示例:
- DatabaseParam database_param = new DatabaseParam();
- database_param.DBType = 1;
- database_param.DBHost = txt_serverName.Text;
- database_param.DBPort = int.Parse(txt_serverPort.Text);
- database_param.DBName = txt_dbName.Text;
- database_param.DBUser = txt_loginName.Text;
- database_param.DBPassword = txt_loginPwd.Password;
- App.G_VMCDatabaseHelper = new DataBaseAccess(database_param,AccessType.MySQLClient);
- App.G_VMCDatabaseHelper.ClearMessage();
- if (App.G_VMCDatabaseHelper.TestConnection())
- {
- }
- else
- {
- App.G_LogOperator.WriteOperationLog("WLogin->Login","Connect to database fail.\r\n" + App.G_VMCDatabaseHelper.ErrorMsg);
- ShowErrorMessageBox("Connect to database fail.");
- return;
- }
- 一个C#实现的数据库访问帮助类DatabaseHelper
- 一个C#实现的数据库访问帮助类DatabaseHelper
- 一个C#实现的数据库访问帮助类DatabaseHelper
- 数据库工具类:DatabaseHelper
- C#访问SQLServer数据库访问帮助类
- C#访问MySQL数据库帮助类
- C#访问MySQL数据库帮助类
- DatabaseHelper类
- SqlHelper For Sqlserver 一个简单实用的数据库访问帮助类
- C#2005 一个简单的Access数据库访问类
- java连接接数据库实现数据库的添加 删除 更新 查询操作的一个帮助类
- 写一个自己的数据库帮助类
- C#之DatabaseHelper
- C#访问postgresql数据库类MyPostDB的实现
- c#数据库帮助类SqlHelper
- TreeViewVisitor: 一个快捷访问 TreeView 控件节点的帮助类
- ADO.NET的一个帮助类库,只须一个连接,一条SQL语句,轻松实现数据库的查旬,再加一个object 轻松实现数据库的增删改
- 大侠,帮助改一个访问数据库的程序, datagrid 记录更新
- 双向链表(创建、求长、打印、删除、插入)
- 2013年嵌入式软件开发工程师的薪资水平调查
- SQL CE和SQLite插入比较
- apk签名
- win7下面dnw驱动的安装方法.
- 一个C#实现的数据库访问帮助类DatabaseHelper
- hdu 3775 pick
- log4j高级用法
- [MINA2.0源码](二)客户端发起连接请求——NioSocketConnector
- HBase 之访问控制
- Android手机目前常见的分辨率
- 豆瓣搜的小Demo
- 能连接4种数据库(外加文件操作)的DatabaseHelper类
- 无异常的字符串数字转换函数