如何利用ADO.NET設(shè)計(jì)獲取架構(gòu)方法實(shí)現(xiàn)
我們今天利用ADO.NET設(shè)計(jì)獲取架構(gòu)使用OleDbDataReader的GetSchemaTable 方法,publicvirtualDataTableGetSchemaTable();該ADO.NET設(shè)計(jì)方法需要結(jié)合OleDbCommand.ExecuteReader的一個(gè)重載方法才能完成,可以設(shè)置重載方法的唯一參數(shù),publicOleDbDataReaderExecuteReader(CommandBehaviorbehavior);CommandBehavior為一枚舉對(duì)象,定義為
- [Flags]
- [Serializable]
- publicenumCommandBehavior
#T#CommandBehavior.SchemaOnly:只返回列信息,不影響數(shù)據(jù)庫(kù)狀態(tài);CommandBehavior.KeyInfo:返回列和主鍵信息。執(zhí)行此查詢時(shí)不鎖定選定的行。如果使用CommandBehavior.SchemaOnly就不需要再加CommandBehavior.KeyInfo了。如果你從前是個(gè)ADO開發(fā)人員,現(xiàn)在已經(jīng)用ADO.NET了,那么你可能把數(shù)據(jù)訪問看做是一個(gè)萬能的對(duì)象,如Recordset。我們很自然地會(huì)將舊的對(duì)象模式同新的對(duì)象模式匹配起來,并將現(xiàn)有的方法用于.NET應(yīng)用程序。然而,在ADO環(huán)境中的某些好的方法在轉(zhuǎn)換到ADO.NET環(huán)境時(shí)就可能并不強(qiáng)大了。下面是ADO.NET設(shè)計(jì)演示代碼:
- privateDataTableGetSchemaUsingOleDbDataReader(stringconnString)
- {
- OleDbConnectionmyConn=newOleDbConnection(connString);
- DataTabletable1=null;
- try
- {
- OleDbCommandcmd=newOleDbCommand("Select*fromCustomers",myConn);
- myConn.Open();
- OleDbDataReaderdataReader=cmd.ExecuteReader(CommandBehavior.SchemaOnly);
- table1=dataReader.GetSchemaTable();
- dataReader.Close();
- }
- catch(Exceptionex)
- {
- MessageBox.Show(ex.ToString());
- }
- finally
- {
- if(myConn.State!=ConnectionState.Closed)
- myConn.Close();
- myConn.Dispose();
- }
- returntable1;
- }
該方法返回了Customers表的架構(gòu)信息,當(dāng)然,如果連接到Access數(shù)據(jù)庫(kù),上面的函數(shù)只需修改一下連接字符串和查詢字符串就可以正確執(zhí)行。