宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 2345|回复: 0

c#中的数据库访问工厂

[复制链接]
  • TA的每日心情
    无聊
    2012-4-6 11:13
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    编程学习者 发表于 2012-3-13 22:25:36 | 显示全部楼层 |阅读模式

    欢迎您注册加入!这里有您将更精采!

    您需要 登录 才可以下载或查看,没有账号?注册

    x
    上午看到一个兄弟的文章,很辛苦的想实现不改代码只改配置来访问不同类型的数据库,自己去实现工厂模式。精神可嘉,但是殊不知c#已经自己为不同类型数据库的访问做了一个工厂。在这里我就把使用工厂的例子贴出来供不知道的兄弟参考一下,高手们可以忽略了。

    首先是配置文件:其中的providerName就是指定的不同数据库类型

    <connectionStrings>
        <add name="..." connectionString=" ..." providerName="System.Data.OleDb" />

        <add name="..." connectionString=" ..." providerName="System.Data.SqlClient" />
      </connectionStrings>

    下面看一下使用工厂的这个类:

    class DataBaseFac
      {
        private DbConnection cnn;//抽象类型
        private DbCommand cmd;//抽象类型
        private DbProviderFactory provider;
        public DataBaseFac()
        {

          //从配置文件中取出标示数据库类型的字符串
          string providerName = ConfigurationManager.ConnectionStrings[1].ProviderName;

          //根据上一部的结果工厂创建一个对应的实例
          provider = DbProviderFactories.GetFactory(providerName);

          //使用该实例就可以创建对应的connection,command和adapater对象了

          //调试的时候可以看到这几个对象都变成了相应于数据库类型的
          cnn = provider.CreateConnection();
          cnn.ConnectionString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
          cmd = provider.CreateCommand();
          cmd.Connection = cnn;
        }

        //执行一次查询,返回数据表

        public DataTable ExcuteQuery(string queryString)
        {
          DataTable result = new DataTable();
          DbDataAdapter adapter = provider.CreateDataAdapter();
          cmd.CommandType = CommandType.Text;
          cmd.CommandText = queryString;
          adapter.SelectCommand = cmd;
          try
          {
            cnn.Open();
            adapter.Fill(result);
          }
          catch
          {
            result = null;
          }
          finally
          {
            cnn.Close();
          }
          return result;

        }

    以上只是简单的应用,并没有做比较高级的封装,只供不知道的兄弟参考。

    顺便说说,上午看到那个兄弟的文章用swith case语句来实现不同的创建connection ,command 和adapater的方法,然后说是工厂方法的实现。其实这是完全错误的,工厂模式的提出就是为了避免这么多swith case造成的麻烦。以后有时间我会把几个常用的模式的提出原因和应用场合总结一下用C#做几个例子给不清楚的兄弟贴出来的。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    免责声明

    本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

    QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

    Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-3-29 00:49 , File On Powered by Discuz! X3.49

    快速回复 返回顶部 返回列表