|
源代码网推荐
大家好,我是武汉华师的SUNWEN,今天Zzz....(快醒醒!啪!..啪!倒,叫我起来也不要用皮鞋来打嘛@#$%&*).现在是五月四号晚上19:33,我好想睡觉.只好打开音乐来提神了!这一节我要讲的是大家非常关心的,肯定也是非常感兴趣的部分.嘿嘿,也是我写教程最拿手的部分----ADO数据库访问.想到这,我就想起我在去年写的"访问数据库"系列文章,嘿嘿!所以呢,如果你觉得对记录集之类的东西比较难理解的话,我推荐你先看一看我的那几篇文章.好了,让我们开始吧! 什么是ADO(ActiveX Data Objects译作ActiveX数据对象),ADO是一个非常简单的思想,一种让你仅用一种方式去访问数据的思想.ADO不算一个新的思想,仅是采用现有的数据访问技术,将其融合起来.如果你不理解ADO,想一想ODBC吧!其实我们在搞ASP的时候,就用到了ADO,还记得吗,那个曾经被我们用过无数次的set conn=Server.CreateObject("ADODB.Connection")吗?是的,就是它.至于ADO的一些概念性的东西,请大家自行查阅资料,不过,其实不了解也没有关系,只把它想象成一个M$给我们的访问数据的工具吧! OK,下面的例子是以一个M$ ACCESS 2000的数据库为基础的,它的结构如下,表名是Categories,文件名是BugTypes.mdb ,赶快建一个吧: Category ID Category Name 源代码网推荐1 Bugbash stuff 源代码网推荐2 Appweek Bugs 源代码网推荐3 .NET Reports 源代码网推荐4 Internal support 好的,我先把所有的程序都写出来,然后我们来一句一句的品尝: 000: // ADOadosample.cs 源代码网推荐001: using System; 源代码网推荐002: using System.Data; 源代码网推荐003: using System.Data.ADO; 源代码网推荐004: 源代码网推荐005: public class MainClass 源代码网推荐006: { 源代码网推荐007: public static void Main () 源代码网推荐008: { 源代码网推荐009: // 设定好连接字符串和选择命令字符串010: string strAccessConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BugTypes.MDB"; 源代码网推荐011: string strAccessSelect = "SELECT * FROM Categories"; 源代码网推荐012: 源代码网推荐013: //建立记录集,并把Categories这个表填进去 源代码网推荐014: DataSet myDataSet = new DataSet(); 源代码网推荐015: myDataSet.Tables.Add("Categories"); 源代码网推荐016: 源代码网推荐017: //建立ADO实例018: ADOConnection myAccessConn = new ADOConnection(strAccessConn); 源代码网推荐019: ADODataSetCommand myAccessDataSetCmd = new ADODataSetCommand(); 源代码网推荐020: myAccessDataSetCmd.SelectCommand = new ADOCommand(strAccessSelect,myAccessConn); 源代码网推荐021: 源代码网推荐022: myAccessConn.Open(); 源代码网推荐023: try 源代码网推荐024: { 源代码网推荐025: myAccessDataSetCmd.FillDataSet(myDataSet,"Categories"); 源代码网推荐026: } 源代码网推荐027: finally 源代码网推荐028: { 源代码网推荐029: myAccessConn.Close(); 源代码网推荐030: } 源代码网推荐031: 源代码网推荐032: try 源代码网推荐033: { 源代码网推荐034: // 一个记录集可以包含多个表,我们把它们放到一个数组中035: DataTable[] dta = myDataSet.Tables.All; 源代码网推荐036: foreach (DataTable dt in dta) 源代码网推荐037: { 源代码网推荐038: Console.WriteLine("Found data table {0}", dt.TableName); 源代码网推荐039: } 源代码网推荐040: 源代码网推荐041: //下面的两行程序展示了两种从一个记录集中得到这个数据集中的表格数的方法 源代码网推荐042: Console.WriteLine("{0} tables in data set", myDataSet.Tables.Count); 源代码网推荐043: Console.WriteLine("{0} tables in data set", dta.Length); 源代码网推荐044: //下面的几行程序说明了如何从一个记录集中依靠表格的名称来取得信息 源代码网推荐045: Console.WriteLine("{0} rows in Categories table", myDataSet.Tables["Categories"].Rows.Count); 源代码网推荐046: //列的信息是自动从数据库中得到的,所以我们可以用以下的代码047: Console.WriteLine("{0} columns in Categories table", myDataSet.Tables["Categories"].Columns.Count); 源代码网推荐048: DataColumn[] drc = myDataSet.Tables["Categories"].Columns.All; 源代码网推荐049: int i = 0; 源代码网推荐050: foreach (DataColumn dc in drc) 源代码网推荐051: { 源代码网推荐052: //打印出列的下标和列的名称和数据类型053: Console.WriteLine("Column name[{0}] is {1}, of type {2}",i++ , dc.ColumnName, dc.DataType); 源代码网推荐054: } 源代码网推荐055: DataRow[] dra = myDataSet.Tables["Categories"].Rows.All; 源代码网推荐056: foreach (DataRow dr in dra) 源代码网推荐057: { 源代码网推荐058: //打印出CategoryID和CategoryName059: Console.WriteLine("CategoryName[{0}] is {1}", dr[0], dr[1]); 源代码网推荐060: } 源代码网推荐061: } 源代码网推荐062: catch (Exception e) 源代码网推荐063: { 源代码网推荐064: Console.WriteLine("Oooops. Caught an exception:
{0}", e.Message); 源代码网推荐065: } 源代码网推荐066: } 源代码网推荐067: } 源代码网推荐看起来,这个例子是有一些复杂的,只怪我例子选的不好,呵呵.不过,细细分析一下,还是可以理解的.我现在说一下这个例子中几个特别的东东.第一就是不象在ASP中,一个命令字符串被须被当作一个命令对象.020做的正是这个事情.注意,在015行有一个myDataSet.Tables.Add("Categories")语句,这并不是把数据库中的Categories这个表填进去,只不过是建一个空表,而025才是真的填充数据. 这个例子的输出是: Found data table Categories 源代码网推荐1 tables in data set 源代码网推荐1 tables in data set 源代码网推荐4 rows in Categories table 源代码网推荐2 columns in Categories table 源代码网推荐Column name[0] is CategoryID, of type Int32 源代码网推荐Column name[1] is CategoryName, of type System.String 源代码网推荐CategoryName[1] is Bugbash stuff 源代码网推荐CategoryName[2] is Appweek Bugs 源代码网推荐CategoryName[3] is .NET Reports 源代码网推荐CategoryName[4] is Internal support 源代码网推荐好了,就说到这吧,SUNWEN真是想睡了,什么音乐都不管用了,呵呵.这个例子还真要花大力气才能完全理解.O.K.886! 源代码网推荐
源代码网供稿. |