使用 ADODataReader 進行高效率的順向唯讀資料流讀取。
// 1. 開啟連線
ADOConnection conn = new ADOConnection(DB_CONN_STRING);
conn.Open();
// 2. 執行命令取得 DataReader
ADODataReader dr;
ADOCommand cmd = new ADOCommand("SELECT * FROM Person", conn);
cmd.Execute(out dr); // 注意 out 關鍵字
// 3. 逐筆讀取
while (dr.Read())
{
Console.WriteLine(dr["FirstName"]); // 以字串形式取得
}
// 4. 清理資源 (建議置於 finally 區塊)
if (conn.State == DBObjectState.Open)
conn.Close();
try
{
// ... 資料庫操作 ...
}
catch (Exception ex)
{
Console.WriteLine("READING:");
Console.WriteLine(" ERROR: " + ex.Message);
Console.WriteLine(" SQL : " + sSqlCmd);
Console.WriteLine(" Conn.: " + DB_CONN_STRING);
}
finally
{
if (conn.State == DBObjectState.Open)
conn.Close();
}
string name = dr["FirstName"]; // 自動 ToString()
// 先取得序數 (效率較佳)
int ageOrdinal = dr.GetOrdinal("Age");
int age = dr.GetInt32(ageOrdinal);
DateTime updated = (DateTime)dr["Updated"]; // 直接轉型
int ageOrdinal = dr.GetOrdinal("Age");
if (dr.IsNull(ageOrdinal))
{
Console.WriteLine("Age: Not given!");
}
else
{
int age = dr.GetInt32(ageOrdinal);
Console.WriteLine("Age: " + age);
}
GetInt32、GetDateTime、GetDouble 等避免額外轉換開銷DataReader、Connection 皆須在 finally 中關閉