数据库助手连接MySQL设置_通用的数据库操作助手类

这个博客介绍了一个名为`DbHelper`的C#类,用于方便地连接和操作MySQL数据库。类中包含了连接字符串获取、数据库连接对象、预处理命令、执行SQL语句(包括带事务的操作)以及获取DataTable的方法。`DbHelper`类使用了`DbProviderFactory`和配置文件来获取数据库连接,并提供了参数化查询的支持。
摘要由CSDN通过智能技术生成

using System;

using System.Data;

using System.Data.Common;

using System.Collections;

using System.Configuration;

namespace OA.Data

{

/// ///数据库访问类/// public class DbHelper

{

#region 私有变量

/// ///数据库连接字符串/// protected static string m_connectionstring = null ;

/// ///DbProviderFactory实例/// private static DbProviderFactory m_factory = null;

/// ///Parameters缓存哈希表/// private static Hashtable m_paramcache = Hashtable.Synchronized(new Hashtable());

private static object lockHelper = new object();

#endregion

#region 属性

/// ///数据库连接字符串/// public static string ConnectionString

{

get

{

if (m_connectionstring == null)

{

m_connectionstring =ConfigurationManager.ConnectionStrings["LocalDb"].ConnectionString;

}

return m_connectionstring;

}

set

{

m_connectionstring = value;

}

}

/// ///DbFactory实例/// public static DbProviderFactory Factory

{

get

{

if (m_factory == null)

{

m_factory = DbProviderFactories.GetFactory(ConfigurationManager.ConnectionStrings["LocalDb"].ProviderName);

}

return m_factory;

}

}

#endregion

#region 私有方法

/// ///预处理用户提供的命令,数据库连接/事务/命令类型/参数/// /// 要处理的DbCommand/// 数据库连接/// 一个有效的事务或者是null值/// 命令类型 (存储过程,命令文本, 其它.)/// 存储过程名或都SQL命令文本/// 和命令相关联的DbParameter参数数组,如果没有参数为'null'/// true如果连接是打开的,则为true,其它情况下为false. private static void PrepareCommand(DbCommand cmd, DbConnection connection, DbTransaction trans, CommandType cmdType, string cmdText, DbParameter[] dbParms, out bool mustCloseConnection)

{

if (cmd == null) throw new ArgumentNullException("DbCommand");

if (cmdText == null || cmdText.Length == 0) throw new ArgumentNullException("CommandType");

//If the provided connection is not open, we will open it if (connection.State != ConnectionState.Open)

{

mustCloseConnection = true;

connection.Open();

}

else

{

mustCloseConnection = false;

}

//给命令分配一个数据库连接. cmd.Connection = connection;

//设置命令文本(存储过程名或SQL语句) cmd.CommandText = cmdText;

//分配事务 if (trans != null)

{

if (trans.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "trans");

cmd.Transaction = trans;

}

//设置命令类型. cmd.CommandType = cmdType;

//分配命令参数 if (dbParms != null)

{

AttachParameters(cmd, dbParms);

}

return;

}

#endregion 私有方法结束

/// ///获取连接对象/// /// /// public static DbConnection GetConn(string key)

{

DbConnection conn = Factory.CreateConnection();

conn.ConnectionString = ConfigurationManager.ConnectionStrings[key].ConnectionString;

conn.Open();

return conn;

}

#region ExecuteNonQuery方法

/// ///执行SQL语句/// /// 命令类型/// SQL语句/// 参数/// public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] dbParms)

{

if (ConnectionString == null || ConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

using (DbConnection connection = Factory.CreateConnection())

{

connection.ConnectionString = ConnectionString;

connection.Open();

return ExecuteNonQuery(connection, cmdType, cmdText, dbParms);

}

}

/// ///执行指定数据库连接对象的命令/// /// 一个有效的数据库连接对象/// 命令类型(存储过程,命令文本或其它.)/// T存储过程名称或SQL语句/// DbParamter参数数组/// 返回影响的行数 public static int ExecuteNonQuery(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] dbParms)

{

if (connection == null) throw new ArgumentNullException("connection");

DbCommand cmd = Factory.CreateCommand();

bool mustCloseConnection = false;

PrepareCommand(cmd, connection, (DbTransaction)null, cmdType, cmdText, dbParms, out mustCloseConnection);

int retval = cmd.ExecuteNonQuery();

//清除参数,以便再次使用. cmd.Parameters.Clear();

if (mustCloseConnection)

connection.Close();

return retval;

}

/// ///带事务执行一组命令/// /// 命令组/// public static int ExecuteNonQuery(DbCommand[] cmds)

{

DbTransaction trans = null;

int i = 0;

try

{

using (DbConnection connection = Factory.CreateConnection())

{

connection.ConnectionString = ConnectionString;

connection.Open();

trans = connection.BeginTransaction();

foreach (DbCommand cmd in cmds)

{

cmd.Transaction = trans;

i = cmd.ExecuteNonQuery();

}

trans.Commit();

return i;

}

}

catch (DbException err)

{

trans.Rollback();

throw err;

}

}

#endregion ExecuteNonQuery方法结束

#region GetTable方法

/// ///获取DataTable./// /// 命令类型 (存储过程,命令文本或其它)/// 存储过程名称或SQL语句/// DbParamter参数数组/// 返回一个包含结果集的DataTable public static DataTable GetTable(CommandType cmdType, string cmdText, params DbParameter[] dbParms)

{

if (ConnectionString == null || ConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

using (DbConnection connection = Factory.CreateConnection())

{

connection.ConnectionString = ConnectionString;

connection.Open();

//调用指定数据库连接字符串重载方法. return GetTable(connection, cmdType, cmdText, dbParms);

}

}

/// ///指定数据库连接对象获取DataTable./// /// 一个有效的数据库连接对象/// 命令类型 (存储过程,命令文本或其它)/// 存储过程名或SQL语句/// DbParamter参数数组/// 返回一个包含结果集的DataTable public static DataTable GetTable(DbConnection connection, CommandType cmdType, string cmdText, params DbParameter[] dbParms)

{

if (connection == null) throw new ArgumentNullException("connection");

//预处理 DbCommand cmd = Factory.CreateCommand();

bool mustCloseConnection = false;

PrepareCommand(cmd, connection, (DbTransaction)null, cmdType, cmdText, dbParms, out mustCloseConnection);

//创建DbDataAdapter和DataTable. using (DbDataAdapter da = Factory.CreateDataAdapter())

{

da.SelectCommand = cmd;

DataTable dt = new DataTable();

//填充DataTable. da.Fill(dt);

cmd.Parameters.Clear();

if (mustCloseConnection)

connection.Close();

return dt;

}

}

#endregion GetTable

#region ExecuteReader 数据阅读器

/// ///枚举,标识数据库连接是由BaseDbHelper提供还是由调用者提供/// private enum DbConnectionOwnership

{

/// 由BaseDbHelper提供连接 Internal,

/// 由调用者提供连接 External

}

/// ///获取DataReader./// /// 命令类型 (存储过程,命令文本或其它)/// 存储过程名称或SQL语句/// DbParamter参数数组/// 返回一个包含结果集的DataReader public static DbDataReader ExecuteReader(CommandType cmdType, string cmdText, params DbParameter[] dbParms)

{

if (ConnectionString == null || ConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

DbConnection connection = null;

try

{

connection = Factory.CreateConnection();

connection.ConnectionString = ConnectionString;

connection.Open();

return ExecuteReader(connection, null, cmdType, cmdText, dbParms, DbConnectionOwnership.Internal);

}

catch (DbException err)

{

if (connection != null) connection.Close();

throw err;

}

}

/// ///指定连接字符串获取DataTable/// /// 连接字符串/// 命令类型/// 存储过程名称或SQL语句/// DbParamter参数数组/// public static DbDataReader ExecuteReader(string connectionString,CommandType cmdType, string cmdText, params DbParameter[] dbParms)

{

if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("ConnectionString");

DbConnection connection = null;

try

{

connection = Factory.CreateConnection();

connection.ConnectionString = connectionString;

connection.Open();

return ExecuteReader(connection, null, cmdType, cmdText, dbParms, DbConnectionOwnership.Internal);

}

catch (DbException err)

{

//If we fail to return the SqlDatReader, we need to close the connection ourselves if (connection != null) connection.Close();

throw err;

}

}

/// ///执行指定数据库连接对象的数据DataReader/// /// 一个有效的数据库连接对象/// 一个有效的事务,或者为 'null'/// 命令类型 (存储过程,命令文本或其它)/// 存储过程名或SQL语句/// DbParameters参数数组,如果没有参数则为'null'/// 标识数据库连接对象是由调用者提供还是由BaseDbHelper提供/// 返回包含结果集的DbDataReader private static DbDataReader ExecuteReader(DbConnection connection, DbTransaction trans, CommandType cmdType, string cmdText, DbParameter[] dbParms, DbConnectionOwnership connectionOwnership)

{

if (connection == null) throw new ArgumentNullException("connection");

bool mustCloseConnection = false;

//创建命令 DbCommand cmd = Factory.CreateCommand();

try

{

PrepareCommand(cmd, connection, trans, cmdType, cmdText, dbParms, out mustCloseConnection);

//创建数据阅读器 DbDataReader dataReader;

if (connectionOwnership == DbConnectionOwnership.External)

{

dataReader = cmd.ExecuteReader();

}

else

{

dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);

}

bool canClear = true;

foreach (DbParameter dbParm in cmd.Parameters)

{

if (dbParm.Direction != ParameterDirection.Input)

canClear = false;

}

if (canClear)

{

cmd.Parameters.Clear();

}

return dataReader;

}

catch

{

if (mustCloseConnection)

connection.Close();

throw;

}

}

/// ///准备输入参数./// /// 参数名称/// 参数数据类型/// 参数大小/// 参数值/// 输入参数 public static DbParameter MakeInParam(string paramName, DbType dbType, int size, object inValue)

{

return MakeParam(paramName, dbType, size, ParameterDirection.Input, inValue);

}

/// ///准备输入参数./// /// 参数名称/// 参数数据类型/// 参数值/// 输入参数 public static DbParameter MakeInParam(string paramName, DbType dbType, object inValue)

{

return MakeParam(paramName, dbType, 0, ParameterDirection.Input, inValue);

}

/// ///准备输出参数./// /// 参数名称/// 参数数据类型/// 参数大小/// 输出参数 public static DbParameter MakeOutParam(string paramName, DbType dbType, int size)

{

return MakeParam(paramName, dbType, size, ParameterDirection.Output, null);

}

/// ///准备存储过程的参数./// /// 参数名称/// 参数数据类型/// 参数大小/// 参数方向/// 参数值/// 输入或输出参数 public static DbParameter MakeParam(string paramName, DbType dbType, int size, ParameterDirection direction, object inValue)

{

DbParameter param = Factory.CreateParameter();

param.ParameterName = paramName;

if (size > 0)

{

param.DbType = dbType;

param.Size = size;

}

else

param.DbType = dbType;

param.Direction = direction;

if (!(direction == ParameterDirection.Output))

{

if (inValue == null)

param.Value = DBNull.Value;

else

param.Value = inValue;

}

return param;

}

#endregion 生成参数结束

}

}

软件名称:数据库助手 版 本:2.0 编程语言:Visual Studio .NET C# 调试环境:WINDOWS 2000 server 运行环境:需要 Microsoft .NET Framework1.1(dotnetfx.exe 23M) 支持 版 权:完全免费 使用说明: 此程序提供给经常使用SQL server,Oracle 的程序开发人员.(支持SQL Server 6.5 7.0 2000;Oracle 9i) 快速浏览数据,更改数据。提取字段名,表名 制作初始化脚本,查看存储过程。快速浏览数据。 可以省去敲数据表名及字段名的麻烦。对于使用SQl server,Oracle 的人员非常方便。 (如需要VB版,可与我联系,VB版2003年后不再升级) 1.登陆页面添写要连接数据库参数。确定后进入第二个页面。 2.点击数据库名,显示相应数据库的数据表名。点击数据表名,显示数据表的 字段信息及数据记录(为了显示速度的要求,只显示前500行,如需要全部记录 请点击“执行”按钮)。 3.制作Insert 脚本,省去程序开发人员手工写脚本。 4.所有sql语句都可在sql框中执行。 5.单击字段名,会出现在sql 框中,并会替代框中选中部分,方便输录。 6.数据记录可以增加,修改,删除。 7.增加查看和修改存储过程功能。(2003.03.03) 8.修改数据库名与密码的加密方法(2003.06.02) 9.增加SQL Server 2000字段描述(2003-10-10) 10.修改FramkWork1.1下DataGrid不支持滚轮键的bug(2003-10-12) 11.更改菜单及支持6.5的数据库(2003.12) 12.更新datetime字段只能显示日期的bug(2004.3.2) 13.更新错误提示方式。(2004.3.10) 14.更改启动时透明度算法可能会出错的问题。(2004.08.19感谢zhiming99) 15.增加对oracle数据库的支持(测试版本9.2)(2004.12) 16.导出数据方式的更改,可一次导出所有表。(2004.12) 17.标记主键(2004.12) 18.增加显示数据库,数据表的数量.(2005.01) 19.修改数据表过多时出现的乱码问题(2005.02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值