﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-3X3的天空-文章分类-数据库操作</title><link>http://www.cppblog.com/nerv3x3/category/7811.html</link><description>只爱自己,只相信自己,只依靠自己,为存在而存在!!!</description><language>zh-cn</language><lastBuildDate>Mon, 11 Aug 2008 04:06:21 GMT</lastBuildDate><pubDate>Mon, 11 Aug 2008 04:06:21 GMT</pubDate><ttl>60</ttl><item><title>ADOX动态创建Access数据库</title><link>http://www.cppblog.com/nerv3x3/articles/58454.html</link><dc:creator>3x3只眼</dc:creator><author>3x3只眼</author><pubDate>Sun, 10 Aug 2008 09:51:00 GMT</pubDate><guid>http://www.cppblog.com/nerv3x3/articles/58454.html</guid><wfw:comment>http://www.cppblog.com/nerv3x3/comments/58454.html</wfw:comment><comments>http://www.cppblog.com/nerv3x3/articles/58454.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/nerv3x3/comments/commentRss/58454.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/nerv3x3/services/trackbacks/58454.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;记得以前要动态的创建Access数据库的mdb文件都是采用DAO，用VC开发，一大堆的API，很是麻烦。现在好像也鲜有人提起DAO。其实动态的创建mdb数据的最简单的方法还是ADOX。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用ADOX创建access数据库方法很简单，只需要new一个Catalog对象，然后调用它的Create方法就可以了，如下：<br>ADOX.Catalog catalog = new Catalog();<br>catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb;Jet OLEDB:Engine Type=5");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;仅仅两行代码就搞定了。下来我主要介绍一下在c＃中的实现细节。首先你要添加引用，在&#8220;Add reference&#8221;对话框里切换到Com页面，选择&#8220;Microsoft ADO Ext. 2.8 for DDL and Security&#8221;,然后点击OK。在文件的开头using ADOX名字空间。然后添加如上面所示的代码就可以成功的创建Access 数据库了，代码如下：<br><br>using System;<br>using System.Collections.Generic;<br>using System.Text;<br>using ADOX;</p>
<p>namespace testADOX<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOX.Catalog catalog = new Catalog();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb;Jet OLEDB:Engine Type=5");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建了数据库文件是没有实际用处的，我们还要创建表。在创建表之前，我们必须连接目标数据库，用来连接数据的桥梁居然是ADO的Connection对象，所以我们不得不再次添加对ADO的应用，在添加引用对话框中切换到Com页面，选择&#8220;Microsoft ActiveX Data Objects 2.8 Library&#8221;，然后点击OK。下边是创建表的完整代码：<br><br>using System;<br>using System.Collections.Generic;<br>using System.Text;<br>using ADOX;</p>
<p>namespace testADOX<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;class Program<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;static void Main(string[] args)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOX.Catalog catalog = new Catalog();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb;Jet OLEDB:Engine Type=5");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADODB.Connection cn = new ADODB.Connection();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\test.mdb", null, null, -1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catalog.ActiveConnection = cn;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOX.Table table = new ADOX.Table();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.Name = "FirstTable";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOX.Column column = new ADOX.Column();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column.ParentCatalog = catalog;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column.Name = "RecordId";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column.Type = DataTypeEnum.adInteger;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column.DefinedSize = 9;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;column.Properties["AutoIncrement"].Value = true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.Columns.Append(column, DataTypeEnum.adInteger, 9);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.Keys.Append("FirstTablePrimaryKey", KeyTypeEnum.adKeyPrimary, column, null, null);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.Columns.Append("CustomerName", DataTypeEnum.adVarWChar, 50);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.Columns.Append("Age", DataTypeEnum.adInteger, 9);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.Columns.Append("Birthday", DataTypeEnum.adDate, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catalog.Tables.Append(table);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cn.Close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上面的代码中，创建了一个名为FirstTable的表，在表里加入了4个字段，并设置了一个主键。表里的字段分别输入4中不同的常用类型，第一个字段是一个自动增长的整数类型，这个类型比较特殊，你必须为这个字段设置ParentCatalog属性，并将&#8220;AutoIncrement&#8221;的属性值设为true.。Access里的Text类型对应的就是adVarWchar，而日期类型对应的是adDate。<br>键的设置如table.Keys.Append("FirstTablePrimaryKey", KeyTypeEnum.adKeyPrimary, column, null, null)所示，如果是外键的话，你还必须要设置关联的表和关联的字段，也就是Append方法的后两个字段。<br>你也可以参照上边的代码创建索引和视图。</p>
<img src ="http://www.cppblog.com/nerv3x3/aggbug/58454.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/nerv3x3/" target="_blank">3x3只眼</a> 2008-08-10 17:51 <a href="http://www.cppblog.com/nerv3x3/articles/58454.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>odbc,oledb,ado,adox的关系</title><link>http://www.cppblog.com/nerv3x3/articles/58453.html</link><dc:creator>3x3只眼</dc:creator><author>3x3只眼</author><pubDate>Sun, 10 Aug 2008 09:38:00 GMT</pubDate><guid>http://www.cppblog.com/nerv3x3/articles/58453.html</guid><wfw:comment>http://www.cppblog.com/nerv3x3/comments/58453.html</wfw:comment><comments>http://www.cppblog.com/nerv3x3/articles/58453.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/nerv3x3/comments/commentRss/58453.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/nerv3x3/services/trackbacks/58453.html</trackback:ping><description><![CDATA[<p>odbc:&nbsp; 曾经的数据库通信标准<br>oledb: 在一切对象化的趋势下,ms打算用它取代odbc.<br>oledb分两种：直接的oledb和面向odbc的oledb,后者架构在odbc上，这样没有自己的oledb提供者的数据库也可以使用oledb的特点了。<br>ado:&nbsp;&nbsp; 其实只是一个应用程序层次的界面，它用oledb来与数据库通信。<br>adox:&nbsp; 对ado的安全性，维护性（如：创建一个数据库）进行了扩展。</p>
<p>1.用odbc连接数据库：<br>odbc中提供三种dsn,它们的区别很简单：用户dsn只能用于本用户。系统dsn和文件dsn的区别只在于连接信息的存放位置不同：系统dsn存放在odbc储存区里，而文件dsn则放在一个文本文件中。<br>&nbsp; 它们的创建方法就不说了。<br>&nbsp; 在asp中使用它们时，写法如下：<br>&nbsp; A.sql server:<br>&nbsp;&nbsp;&nbsp;&nbsp; 用系统dsn: connstr="DSN=dsnname; UID=xx; PWD=xxx;DATABASE=dbname" <br>&nbsp;&nbsp;&nbsp;&nbsp; 用文件dsn: connstr="FILEDSN=xx;&nbsp; UID=xx; PWD=xxx;DATABASE=dbname" <br>&nbsp;&nbsp;&nbsp;&nbsp; 还可以用连接字符串（从而不用再建立dsn):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connstr="DRIVER={SQL SERVER};SERVER=servername;UID=xx;PWD=xxx"<br>&nbsp; B.access:<br>&nbsp;&nbsp;&nbsp;&nbsp; 用系统dsn: connstr="DSN=dsnname"<br>&nbsp;&nbsp;&nbsp; &nbsp;(或者为：connstr="DSN=dsnname;UID=xx;PWD=xxx")<br>&nbsp;&nbsp;&nbsp;&nbsp; 用文件dsn: connstr="FILEDSN=xx" <br>&nbsp;&nbsp;&nbsp;&nbsp; 还可以用连接字符串（从而不用再建立dsn):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connstr="DRIVER={Microsoft Access Driver};DBQ=d:\abc\abc.mdb"</p>
<p>2.用oledb连接数据库：<br>&nbsp;&nbsp; A.sql server:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;connstr="PROVIDER=SQLOLEDB;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATA SOURCE=servername;UID=xx;PWD=xxx;DATABASE=dbname" <br>&nbsp;&nbsp; B.access:<br>&nbsp;&nbsp;&nbsp; &nbsp; connstr="PROVICER=MICROSOFT.JET.OLEDB.4.0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DATA SOURCE=c:\abc\abc.mdb"</p>
<p>3.使用UDL文件：<br>&nbsp; UDL文件是用来存放数据库连接信息的一个文本文件，有点象文件DSN，不过UDL是针对OLEDB（直接的和面向ODBC的）的。<br>&nbsp; UDL的创建方法：<br>&nbsp;&nbsp;&nbsp; 右击桌面或资源管理器-》新建-》microsoft数据连接<br>&nbsp;&nbsp;&nbsp; 其中的设置工作应该比较清楚了。<br>&nbsp; UDL的用法：<br>&nbsp;&nbsp;&nbsp; connstr="file name=e:\abc\abc.udl" </p>
<img src ="http://www.cppblog.com/nerv3x3/aggbug/58453.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/nerv3x3/" target="_blank">3x3只眼</a> 2008-08-10 17:38 <a href="http://www.cppblog.com/nerv3x3/articles/58453.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>