DbUtility数据库操作

 
using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Data;  
using System.Data.Common;  
using System.Reflection;  
using System.Text.RegularExpressions;  
  
/// <summary>  
/// 通用数据库访问类,封装了对数据库的常见操作  
/// 作者:周公  
/// 日期:2011-07-18  
/// 博客地址:http://blog.csdn.net/zhoufoxcn 或http://zhoufoxcn.blog.51cto.com  
/// 说明:(1)任何人都可以免费使用,请尽量保持此段说明。  
///      (2)这个版本还不是最终版本,有任何意见或建议请到http://weibo.com/zhoufoxcn处留言。  
/// </summary>  
public sealed class DbUtility  
{  
    public string ConnectionString { get; private set; }  
    private DbProviderFactory providerFactory;  
    /// <summary>  
    /// 构造函数  
    /// </summary>  
    /// <param name="connectionString">数据库连接字符串</param>  
    /// <param name="providerType">数据库类型枚举,参见<paramref name="providerType"/></param>  
    public DbUtility(string connectionString,DbProviderType providerType)  
    {  
        ConnectionString = connectionString;  
        providerFactory = ProviderFactory.GetDbProviderFactory(providerType);  
        if (providerFactory == null)  
        {  
            throw new ArgumentException("Can't load DbProviderFactory for given value of providerType");  
        }  
    }  
    /// <summary>     
    /// 对数据库执行增删改操作,返回受影响的行数。     
    /// </summary>     
    /// <param name="sql">要执行的增删改的SQL语句</param>     
    /// <param name="parameters">执行增删改语句所需要的参数</param>  
    /// <returns></returns>    
    public int ExecuteNonQuery(string sql,IList<DbParameter> parameters)  
    {  
        return ExecuteNonQuery(sql, parameters, CommandType.Text);  
    }  
    /// <summary>     
    /// 对数据库执行增删改操作,返回受影响的行数。     
    /// </summary>     
    /// <param name="sql">要执行的增删改的SQL语句</param>     
    /// <param name="parameters">执行增删改语句所需要的参数</param>  
    /// <param name="commandType">执行的SQL语句的类型</param>  
    /// <returns></returns>  
    public int ExecuteNonQuery(string sql,IList<DbParameter> parameters, CommandType commandType)  
    {  
        using (DbCommand command = CreateDbCommand(sql, parameters, commandType))  
        {  
            command.Connection.Open();  
            int affectedRows=command.ExecuteNonQuery();  
            command.Connection.Close();  
            return affectedRows;  
        }  
    }  
    /// <summary>     
    /// 执行一个查询语句,返回一个关联的DataReader实例     
    /// </summary>     
    /// <param name="sql">要执行的查询语句</param>     
    /// <param name="parameters">执行SQL查询语句所需要的参数</param>  
    /// <returns></returns>   
    public DbDataReader ExecuteReader(string sql, IList<DbParameter> parameters)  
    {  
        return ExecuteReader(sql, parameters, CommandType.Text);  
    }  
    /// <summary>     
    /// 执行一个查询语句,返回一个关联的DataReader实例     
    /// </summary>     
    /// <param name="sql">要执行的查询语句</param>     
    /// <param name="parameters">执行SQL查询语句所需要的参数</param>  
    /// <param name="commandType">执行的SQL语句的类型</param>  
    /// <returns></returns>   
    public DbDataReader ExecuteReader(string sql, IList<DbParameter> parameters, CommandType commandType)  
    {  
        DbCommand command = CreateDbCommand(sql, parameters, commandType);  
        command.Connection.Open();  
        return command.ExecuteReader(CommandBehavior.CloseConnection);  
    }  
    /// <summary>     
    /// 执行一个查询语句,返回一个包含查询结果的DataTable     
    /// </summary>     
    /// <param name="sql">要执行的查询语句</param>     
    /// <param name="parameters">执行SQL查询语句所需要的参数</param>  
    /// <returns></returns>  
    public DataTable ExecuteDataTable(string sql, IList<DbParameter> parameters)  
    {  
        return ExecuteDataTable(sql, parameters, CommandType.Text);  
    }  
    /// <summary>     
    /// 执行一个查询语句,返回一个包含查询结果的DataTable     
    /// </summary>     
    /// <param name="sql">要执行的查询语句</param>     
    /// <param name="parameters">执行SQL查询语句所需要的参数</param>  
    /// <param name="commandType">执行的SQL语句的类型</param>  
    /// <returns></returns>  
    public DataTable ExecuteDataTable(string sql, IList<DbParameter> parameters, CommandType commandType)  
    {  
        using (DbCommand command = CreateDbCommand(sql, parameters, commandType))  
        {  
            using (DbDataAdapter adapter = providerFactory.CreateDataAdapter())  
            {  
                adapter.SelectCommand = command;  
                DataTable data = new DataTable();  
                adapter.Fill(data);  
                return data;  
            }  
        }  
    }  
    /// <summary>     
    /// 执行一个查询语句,返回查询结果的第一行第一列     
    /// </summary>     
    /// <param name="sql">要执行的查询语句</param>     
    /// <param name="parameters">执行SQL查询语句所需要的参数</param>     
    /// <returns></returns>     
    public Object ExecuteScalar(string sql, IList<DbParameter> parameters)  
    {  
        return ExecuteScalar(sql, parameters, CommandType.Text);  
    }  
  
    /// <summary>     
    /// 执行一个查询语句,返回查询结果的第一行第一列     
    /// </summary>     
    /// <param name="sql">要执行的查询语句</param>     
    /// <param name="parameters">执行SQL查询语句所需要的参数</param>     
    /// <param name="commandType">执行的SQL语句的类型</param>  
    /// <returns></returns>     
    public Object ExecuteScalar(string sql, IList<DbParameter> parameters,CommandType commandType)  
    {  
        using (DbCommand command = CreateDbCommand(sql, parameters, commandType))  
        {  
            command.Connection.Open();  
            object result = command.ExecuteScalar();  
            command.Connection.Close();  
            return result;  
        }  
    }  
    /// <summary>  
    /// 创建一个DbCommand对象  
    /// </summary>  
    /// <param name="sql">要执行的查询语句</param>     
    /// <param name="parameters">执行SQL查询语句所需要的参数</param>  
    /// <param name="commandType">执行的SQL语句的类型</param>  
    /// <returns></returns>  
    private DbCommand CreateDbCommand(string sql, IList<DbParameter> parameters, CommandType commandType)  
    {  
        DbConnection connection=providerFactory.CreateConnection();  
        DbCommand command = providerFactory.CreateCommand();  
        connection.ConnectionString = ConnectionString;  
        command.CommandText = sql;  
        command.CommandType = commandType;  
        command.Connection = connection;  
        if (!(parameters == null || parameters.Count == 0))  
        {  
            foreach (DbParameter parameter in parameters)  
            {  
                command.Parameters.Add(parameter);  
            }  
        }  
        return command;  
    }  
}  
/// <summary>  
/// 数据库类型枚举  
/// </summary>  
public enum DbProviderType:byte  
{  
    SqlServer,  
    MySql,  
    SQLite,  
    Oracle,  
    ODBC,  
    OleDb,  
    Firebird,  
    PostgreSql,  
    DB2,  
    Informix,  
    SqlServerCe  
}  
/// <summary>  
/// DbProviderFactory工厂类  
/// </summary>  
public class ProviderFactory  
{  
    private static Dictionary<DbProviderType, string> providerInvariantNames = new Dictionary<DbProviderType, string>();  
    private static Dictionary<DbProviderType, DbProviderFactory> providerFactoies = new Dictionary<DbProviderType, DbProviderFactory>(20);  
    static ProviderFactory()  
    {  
        //加载已知的数据库访问类的程序集  
        providerInvariantNames.Add(DbProviderType.SqlServer, "System.Data.SqlClient");  
        providerInvariantNames.Add(DbProviderType.OleDb, "System.Data.OleDb");  
        providerInvariantNames.Add(DbProviderType.ODBC, "System.Data.ODBC");  
        providerInvariantNames.Add(DbProviderType.Oracle, "Oracle.DataAccess.Client");  
        providerInvariantNames.Add(DbProviderType.MySql, "MySql.Data.MySqlClient");  
        providerInvariantNames.Add(DbProviderType.SQLite, "System.Data.SQLite");  
        providerInvariantNames.Add(DbProviderType.Firebird, "FirebirdSql.Data.Firebird");  
        providerInvariantNames.Add(DbProviderType.PostgreSql, "Npgsql");  
        providerInvariantNames.Add(DbProviderType.DB2, "IBM.Data.DB2.iSeries");  
        providerInvariantNames.Add(DbProviderType.Informix, "IBM.Data.Informix");  
        providerInvariantNames.Add(DbProviderType.SqlServerCe, "System.Data.SqlServerCe");  
    }  
    /// <summary>  
    /// 获取指定数据库类型对应的程序集名称  
    /// </summary>  
    /// <param name="providerType">数据库类型枚举</param>  
    /// <returns></returns>  
    public static string GetProviderInvariantName(DbProviderType providerType)  
    {  
        return providerInvariantNames[providerType];  
    }  
    /// <summary>  
    /// 获取指定类型的数据库对应的DbProviderFactory  
    /// </summary>  
    /// <param name="providerType">数据库类型枚举</param>  
    /// <returns></returns>  
    public static DbProviderFactory GetDbProviderFactory(DbProviderType providerType)  
    {  
        //如果还没有加载,则加载该DbProviderFactory  
        if (!providerFactoies.ContainsKey(providerType))  
        {  
            providerFactoies.Add(providerType, ImportDbProviderFactory(providerType));  
        }  
        return providerFactoies[providerType];  
    }  
    /// <summary>  
    /// 加载指定数据库类型的DbProviderFactory  
    /// </summary>  
    /// <param name="providerType">数据库类型枚举</param>  
    /// <returns></returns>  
    private static DbProviderFactory ImportDbProviderFactory(DbProviderType providerType)  
    {  
        string providerName = providerInvariantNames[providerType];  
        DbProviderFactory factory = null;  
        try  
        {  
            //从全局程序集中查找  
            factory = DbProviderFactories.GetFactory(providerName);  
        }  
        catch (ArgumentException e)  
        {  
            factory = null;  
        }  
        return factory;  
    }  
}  
/*SQLITE
string connectionString = @"Data Source=D:\VS2008\NetworkTime\CrawlApplication\CrawlApplication.db3";  
string sql = "SELECT * FROM Weibo_Media order by Id desc limit 0,20000";  
DbUtility db = new DbUtility(connectionString, DbProviderType.SQLite);  
DataTable data = db.ExecuteDataTable(sql, null);  
DbDataReader reader = db.ExecuteReader(sql, null);  
reader.Close();  
*/

/*MySQL
 string connectionString = @"Server=localhost;Database=crawldb;Uid=root;Pwd=root;Port=3306;";  
string sql = "SELECT * FROM Weibo_Media order by Id desc limit 0,20000";  
DbUtility db = new DbUtility(connectionString, DbProviderType.MySql);  
DataTable data = db.ExecuteDataTable(sql, null);  
DbDataReader reader = db.ExecuteReader(sql, null);  
reader.Close();
*/


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

目前有的版本,可以去周公的博客园看看

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLUtility - SQLServer 工具箱 软件说明:   在使用SQLServer企业管理器生成SQL脚本时,并没有按照数据库对象的依赖关系对脚本顺序进行排序。这个BUG导致了生成的脚本无法直接执行,开发人员必须手工对其进行排序或者寻找其他替代方案,从而增加了很大的工作量和麻烦。写本工具的初始原因就是为了解决上述问题,既然写好了,就应该和大家共享。在发布之前顺便又添加了清除事务日志的功能,以后有时间、有需要的话,打算添加更多的实用功能。希望这个小工具能给大家带来一些帮助。 运行环境:   由于是使用.NET写的,所以运行前需要安装.NET运行环境,这可能会给您带来一些麻烦(下载和安装运行环境),在此,我对所有受到影响的朋友表示歉意! 本工具支持SQLServer2000+sp2以上版本,希望大家帮忙测试、报告BUG或提出建议,欢迎到我的BLOG来讨论,谢谢! 运行环境下载地址(23M): http://www.microsoft.com/downloads/details.aspx?FamilyId=262D25E3-F589-4842-8157-034D1E7CF3A3&displaylang=en http://www.ustc9703.com/download/get.asp?id=21&type=1&url=1 http://cq.down.chinaz.com/down/NETFramework.exe 如何选择和连接数据库: • 先从下拉框中选择服务器 • 如果使用用户名和密码登录,则填入用户名和密码(不要选择“集成Windows认证”复选框) • 如果使用Windows认证登录,则选中“集成Windows认证”复选框 • 完成上述步骤后,就可以从下拉框中选择数据库了(您也可以点击“重新连接”以刷新数据库信息) • 选择好数据库后,就可以执行以下各项功能 SQL脚本排序: • 使用前请先在SQLServer企业管理器里生成SQL脚本,保存为文件 • 运行本程序,在主界面上选择数据库,点击“脚本排序”按钮进入排序界面 • 在脚本排序界面点“浏览”按钮选择刚才生成的文件,点击“开始排序”按钮 清除事务日志: • 运行本程序,在主界面上选择数据库,点击“清除日志”按钮 数据导出: • 运行本程序,在主界面上选择数据库,点击“数据导出”按钮进入数据导出界面 • 导出XML:在数据导出界面中选择要导出的数据表,点击“导出XML”按钮,选择要保存的文件后等待导出结束即可;导出的结果是XML文件,该文件可以用“数据导入”功能导入到目标数据库。 • 导出SQL:在数据导出界面中选择要导出的数据表,点击“导出SQL”按钮,选择要保存的文件后等待导出结束即可;导出的结果是SQL脚本,该脚本可以用查询分析器执行。 数据导入: • 运行本程序,在主界面上选择数据库,点击“数据导入”按钮进入数据导入界面 • 进入界面时会要求您选择数据文件,您也可以点击“打开XML数据文件”选择其他的数据文件 • 在数据导入界面中选择要导入的数据表,点击“数据检测”按钮可以检查目标数据库中是否有已存在的数据 • 在数据导入界面中选择要导入的数据表,点击“导入数据”按钮可以将所选数据导入到目标数据库 • 说明:导入过程中会自动处理Identity列,并且会根据表之间的依赖关系,先导入主键表再导入外键表 作者联系方式: Email : xian@vip.163.com Blog : http://www.cnblogs.com/happyprogram/
### 回答1: dbutility mfc 是一个用于数据库操作的MFC类库。 MFC(Microsoft Foundation Class)是微软公司为Windows操作系统开发的一套类库,用于简化Windows应用程序的开发。在MFC中,dbutility是一个封装了数据库操作功能的类库。它提供了一系列的类和函数,使得开发人员能够更加方便地进行数据库的连接、查询、更新等操作dbutility mfc中的类库主要包括以下几个方面的功能: 1. 数据库连接:dbutility mfc提供了连接数据库的接口,可以连接各种类型的数据库,例如SQL Server、Oracle、MySQL等。开发人员只需提供相应的连接参数即可轻松地连接数据库。 2. 数据查询:dbutility mfc封装了数据库查询的函数,可以方便地执行SQL语句并获取查询结果。通过使用dbutility mfc,开发人员可以快速实现复杂的数据查询功能。 3. 数据更新:除了查询功能外,dbutility mfc还提供了数据更新的函数。开发人员可以通过调用这些函数来实现数据的插入、修改和删除等操作dbutility mfc会自动处理数据更新时的异常情况,确保数据的完整性和一致性。 4. 数据库事务:dbutility mfc支持数据库事务的处理。开发人员可以使用dbutility mfc提供的接口来开启和提交事务,保证数据库操作的原子性和一致性。 总之,dbutility mfc是一个功能强大、易于使用的数据库操作类库,可以大大简化开发人员的数据库操作工作。无论是构建简单的数据查询应用还是复杂的数据管理系统,使用dbutility mfc都能够提高开发效率,减少开发工作量。 ### 回答2: DBUtility MFC是一个基于Microsoft基金会的Windows编程框架MFC(Microsoft Foundation Class)的数据库工具集。它提供了一套用于管理和操作数据库的函数和类,旨在简化开发者在MFC应用程序中使用数据库的过程。 DBUtility MFC具有以下几个主要的功能和特点: 1. 数据库连接管理:它提供了灵活而简单的数据库连接管理功能。通过提供连接字符串,开发者可以轻松地连接到多种类型的数据库,包括Microsoft SQL Server、Oracle、MySQL等。 2. 数据库操作封装:DBUtility MFC封装了常见的数据库操作,如查询、插入、更新、删除等。开发者可以通过调用封装好的函数来执行这些操作,从而简化了对数据库操作。 3. 数据库事务支持:它提供了事务管理的功能,可以确保数据库操作的原子性和一致性。开发者可以通过开始事务、提交事务或回滚事务来管理数据库操作的一致性。 4. 数据库连接池:为了提高性能,DBUtility MFC还提供了数据库连接池的支持。连接池可以缓存和重复利用数据库连接,从而减少了数据库连接的开销。 5. 数据库错误处理:DBUtility MFC提供了对数据库错误的处理功能。开发者可以通过捕获错误代码和错误信息,并采取相应的措施来处理错误情况。 综上所述,DBUtility MFC是一个方便开发者在MFC应用程序中管理和操作数据库的工具集。它提供了连接管理、操作封装、事务支持、连接池和错误处理等功能,帮助开发者简化了对数据库操作,提高了应用程序的性能和可靠性。 ### 回答3: DbUtility是一个基于MFC(Microsoft Foundation Classes)的数据库操作工具,用于简化开发人员在Windows平台上使用数据库的工作。 DbUtility提供了一系列的MFC类和函数,使得开发人员可以方便地连接、查询、更新和管理数据库。它支持多种流行的数据库管理系统,如Microsoft SQL Server、Oracle、MySQL等。开发人员不需要编写大量的重复代码,只需使用DbUtility提供的接口,即可快速构建功能丰富的数据库应用程序。 使用DbUtility,开发人员可以轻松地建立与数据库的连接,并执行各种数据库操作,如查询数据、插入数据、更新数据、删除数据等。DbUtility提供了一套友好的API,使得操作数据库变得非常简单和直观。 DbUtility还提供了一些高级功能,如事务处理、批处理操作、数据分页、数据排序等。这些功能可以帮助开发人员更好地管理和优化数据库操作,提高程序的性能和稳定性。 此外,DbUtility还支持数据模型的自动生成和更新,开发人员只需定义好数据表结构,就可使用DbUtility生成对应的实体类和数据库脚本,减少了手动编写SQL语句的工作量。 总的来说,DbUtility是一款功能强大且易使用的数据库操作工具,它基于MFC框架,为开发人员提供了一种高效、便捷的方式来处理数据库操作,提升了开发效率和代码质量。无论是简单的查询操作还是复杂的数据管理,都可以通过DbUtility轻松实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值