?using System;
using System.Data;
using System.Data.OleDb;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace A0150_Access.Sample
{
/// <summary>
/// 用于 訪問(wèn) Access 數(shù)據(jù)庫(kù)的例子.
///
///
/// </summary>
class ReadAccessDB
{
/// <summary>
/// Access 的數(shù)據(jù)庫(kù)連接字符串.
/// </summary>
private const String connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\TeamMemberManager.mdb";
/// <summary>
/// 用于查詢(xún)的 SQL 語(yǔ)句.
/// </summary>
private const String SQL = "SELECT member_type_code, member_type_name FROM team_member_type";
/// <summary>
/// DataSet 導(dǎo)出的文件
/// </summary>
private const String DATATABLE_XML_FILE = "datatable.xml";
private const String DATATABLE_SCHEMA_XML_FILE = "datatable_schema.xml";
/// <summary>
/// 將數(shù)據(jù)讀取到 DataSet 中.
///
/// 這里演示了2種方式,一種是從數(shù)據(jù)庫(kù)中讀取,一種是從XML文件中讀取.
///
/// 作為對(duì)比,還可以參考 A0210_DataSetXML 項(xiàng)目下的 DataSetReadXml 類(lèi),那里的讀取方式,與這里有些差異。
/// </summary>
public void ReadDataToDataSet()
{
Console.WriteLine("使用DataAdapter,將數(shù)據(jù)填充到DataSet中,然后脫離數(shù)據(jù)庫(kù),直接對(duì)DataSet進(jìn)行處理。");
// 建立數(shù)據(jù)庫(kù)連接.
OleDbConnection conn = new OleDbConnection(connString);
// 創(chuàng)建一個(gè)適配器
OleDbDataAdapter adapter = new OleDbDataAdapter(SQL, conn);
// 創(chuàng)建DataSet,用于存儲(chǔ)數(shù)據(jù).
DataSet testDataSet = new DataSet();
// 執(zhí)行查詢(xún),并將數(shù)據(jù)導(dǎo)入DataSet.
adapter.Fill(testDataSet, "team_member_type");
// 關(guān)閉數(shù)據(jù)庫(kù)連接.
conn.Close();
// 處理DataSet中的每一行數(shù)據(jù).
foreach (DataRow testRow in testDataSet.Tables["team_member_type"].Rows)
{
// 將檢索出來(lái)的數(shù)據(jù),輸出到屏幕上.
Console.WriteLine("ID: {0} Name: {1}",
testRow["member_type_code"], testRow["member_type_name"]
);
}
// 注意:
// 在通過(guò) DataTable 的 WriteXml 方法來(lái)導(dǎo)出數(shù)據(jù),給其他系統(tǒng)使用的時(shí)候
// 還需要使用 WriteXmlSchema 來(lái)導(dǎo)出 Schema
// 否則在使用 ReadXml 讀取的時(shí)候, 會(huì)發(fā)生錯(cuò)誤,因?yàn)樾碌?DataTable 不知道表的結(jié)構(gòu),不知道該如何去讀取.
// 除非你手動(dòng)設(shè)置好每個(gè)列的字段/數(shù)據(jù)類(lèi)型等信息,那么 DataSet 或者 DataTable 將能夠理解如何倒入,而不在需要 ReadXmlSchema
Console.WriteLine("將 DataTable 的數(shù)據(jù),寫(xiě)入到 XML 文件中。");
testDataSet.Tables["team_member_type"].WriteXmlSchema(DATATABLE_SCHEMA_XML_FILE);
testDataSet.Tables["team_member_type"].WriteXml(DATATABLE_XML_FILE);
Console.WriteLine("從 XML 文件中,讀取數(shù)據(jù)到 DataTable 里面。");
DataTable newDt = new DataTable();
newDt.ReadXmlSchema(DATATABLE_SCHEMA_XML_FILE);
newDt.ReadXml(DATATABLE_XML_FILE);
// 輸出 DataTable 信息。
foreach (DataRow testRow in newDt.Rows)
{
// 將檢索出來(lái)的數(shù)據(jù),輸出到屏幕上.
Console.WriteLine("ID: {0} Name: {1}",
testRow["member_type_code"], testRow["member_type_name"]
);
}
}
/// <summary>
/// 通過(guò) Reader, 依次讀取每一條數(shù)據(jù).
/// </summary>
public void ReadDataByReader()
{
Console.WriteLine("使用DataReader,逐行對(duì)查詢(xún)結(jié)果進(jìn)行處理。[處理過(guò)程必須保持?jǐn)?shù)據(jù)庫(kù)連接正常]");
// 建立數(shù)據(jù)庫(kù)連接.
OleDbConnection conn = new OleDbConnection(connString);
// 打開(kāi)連接.
conn.Open();
// 創(chuàng)建一個(gè) Command.
OleDbCommand testCommand = conn.CreateCommand();
// 定義需要執(zhí)行的SQL語(yǔ)句.
testCommand.CommandText = SQL;
// 執(zhí)行SQL命令,結(jié)果存儲(chǔ)到Reader中.
OleDbDataReader testReader = testCommand.ExecuteReader();
// 處理檢索出來(lái)的每一條數(shù)據(jù).
while (testReader.Read())
{
// 將檢索出來(lái)的數(shù)據(jù),輸出到屏幕上.
Console.WriteLine("ID: {0} Name: {1}",
testReader["member_type_code"], testReader["member_type_name"]
);
}
// 關(guān)閉Reader.
testReader.Close();
// 關(guān)閉數(shù)據(jù)庫(kù)連接.
conn.Close();
}
}
}
聯(lián)系客服