首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# ADO.NET 資料庫操作實戰(二):資料讀取、型別轉換與例外處理模式

     編輯:關於C語言

資料讀取流程

使用 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-Finally 模式

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"];  // 直接轉型

Null 值檢查 (必要!)

int ageOrdinal = dr.GetOrdinal("Age");
if (dr.IsNull(ageOrdinal))
{
    Console.WriteLine("Age: Not given!");
}
else
{
    int age = dr.GetInt32(ageOrdinal);
    Console.WriteLine("Age: " + age);
}

關鍵提醒

  • GetOrdinal:依欄位名稱取得索引,避免硬式編碼索引位置
  • 型別專用方法:GetInt32、GetDateTime、GetDouble 等避免額外轉換開銷
  • IsNull 檢查:資料庫 NULL 值直接轉型會拋出例外,務必先檢查
  • 資源釋放:DataReader、Connection 皆須在 finally 中關閉
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved