`
womendu
  • 浏览: 1480560 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

访问任何数据库,只需三句话

阅读更多

一、基础应用
话不多说,代码为证。以Access数据库为例:
DataManager dm = new OleDbManager(@"x:\data.mdb");
dm.Open();
dm.Exec("any SQL Command");//执行SQL语句,返回受响应的行数

以SQL Server数据库为例:
DataManager dm = new SQLManager("serverIP", "database", "uid", "pwd");
dm.Open();
DataTable dt = dm.Select("select * from table1");//将查询结果导入DataTable中

如果您指示想简单高效的访问数据库,实现上述代码,您需要下载Icyplayer.Data开源库
地址:http://files.cnblogs.com/icyplayer/Icyplayer.rar

二、高级应用
我们发现上面两段代码执行后都得到了一个数据管理器DataManager dm,无论是Access还是SqlServer,从而为数据库迁移提供了极大方便。
于是我们使用上述的dm对象,实现数据库的异步更新:
DataUpdater updater = dm.AllocateDataUpdater();
DataTable dt = updater.SelectWithUpdate("select * from table1");
//此处可以任意修改DataTable dt,增加、修改、删除行等。
updater.Update(dt);

上面三句则实现了数据库的异步更新。

如果不是Access数据库也不是SqlServer数据库,如何连接?
以自定义的连接字符串为例(MySQL):
DataManager dm = new OleDbManager();
dm.ConnString = "Driver={mySQL};Server=localhost;Option=16834;Database=myDataBase;";
dm.OpenByConnString()
这样我们还是可以得到一个通用的DataManager dm;进行各种操作。

如果这些功能已经满足了您的要求,或者需要了解更多功能,请下载Icyplayer开源库,参考附带的开发帮助
地址:http://files.cnblogs.com/icyplayer/Icyplayer.rar

三、原理
上述代码看起来很简洁,然而微软的东西向来以繁琐著称,相信接触过Win32API的朋友们都有深刻感触,于是我们不得不把很多功能进行封装,以便更方便的使用。下面是Icyplayer.Data的原理:
1、通用的数据库操作
DataManager类封装了一组抽象方法(更像一个接口),OleDbManager和SQLManager类则继承DataManager并实现了这些方法,于是通过DataManager的对象来访问不同数据库,只需修改连接代码,而其他访问代码都无需修改。

2、异步更新
我们需要两个对象:
//OleDbDataAdapter用来承载sql语句的执行结果,它可以把结果导出到DataTable或DataSet中
System.Data.OleDb.OleDbDataAdapter _dap;
//OleDbCommandBuilder必须关联一个OleDbDataAdapter,可以根据OleDbDataAdapter的查询结果自动生成更新sql语句
System.Data.OleDb.OleDbCommandBuilder _cmdb;
首先建立数据库连接:
System.Data.OleDb.OleDbConnection _conn;
_conn = new OleDbConnection();
_conn.ConnectionString = SQL_ConnectString;
_conn.Open();
然后,使_cmdb关联到_dap,并执行SQLCmd语句,把结果填充到dt中
DataTable dt = new DataTable();
_dap = new OleDbDataAdapter(SQLCmd, dataManager._conn);
_cmdb = new OleDbCommandBuilder(_dap);
_dap.Fill(dt);
此时,我们就可以修改dt中的内容
最后,提交更新
_dap.Update(dt);

这就是让.net 帮我们自动生成sql语句的过程,简单吧~
如果您有兴趣,可以下载Icyplayer类库的全部源代码

1
1
分享到:
评论
1 楼 mercyblitz 2010-12-24  
模范ADO.NET?

相关推荐

    PLSQLDeveloper下载

    在本文第一段代码中有一句话如下: cursor c_emp is select * from employee where emp_id=3; 其含义是定义一个游标c_emp,代表employee表中所有emp_id字段为3的结果集。当需要操作该结果集时,必须完成三步:打开...

    PL/SQL Developer8.04官网程序_keygen_汉化

    在本文第一段代码中有一句话如下: cursor c_emp is select * from employee where emp_id=3; 其含义是定义一个游标c_emp,代表employee表中所有emp_id字段为3的结果集。  当需要操作该结果集时,必须完成三步:...

    sql总结.doc

    1.在语法上,行级触发器就多了一句话:for each row 2.在表现上,行级触发器,在每一行的数据进行操作的时候都会触发。 语句级触发器,对表的一个完整操作才会触发一次。 简单的说:行级触发器,是对应行操作的;...

    SQL语法大全

    1. ASP与Access数据库连接: dim conn,mdbfile mdbfile=server.mappath("数据库名称.mdb") set conn=server.createobject("adodb.connection") conn.open "driver={microsoft access driver (*.mdb)};uid=admin;...

    Android程序设计基础

     虽然大多数作者都希望读者阅读他们书中的每一句话,但我知道你可能不想这样做。你只希望阅读能够解决手头问题的部分,而在需要解决其他问题时,再回过头来阅读另外一些内容。因此,我在书中特意注明在哪里可以找到...

    超级有影响力霸气的Java面试题大全文档

    SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。  对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器...

    java 面试题 总结

    SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。 对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上...

    华为编程开发规范与案例

    上面的问题解决起来很容易,只需在第一行代码中增加一个判断条件即可,如下:  for(i=0; i<pSysHead->dbf_coun && i ; i++) // MAX_DB_NUM=127 这样就保证了循环变量i的值在正常范围内,从而避免了对指针pDBFat...

    Java面试宝典2010版

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    最新Java面试宝典pdf版

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    Java面试笔试资料大全

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    java面试宝典2012

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 52 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    Java面试宝典2012新版

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    JAVA面试宝典2010

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    Java面试宝典-经典

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    java面试题大全(2012版)

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    Java面试宝典2012版

    69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 48 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是父类的compareTo方法,还是使用的子类的...

    正则表达式

    对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" $ 匹配一个输入或一行的结尾,/a...

Global site tag (gtag.js) - Google Analytics