將 ADO.NET 核心物件封裝於 DataSource 類別,集中管理連線字串、連線、命令、適配器、資料集與讀取器:
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
public class DataSource {
private string connString;
private SqlConnection sqlConn;
private SqlCommand sqlCmd;
private SqlDataAdapter sqlAdapter;
private DataSet ds;
private SqlDataReader sqlReader;
public DataSource() {
connString = ConfigurationManager.ConnectionStrings["MyDB"].ConnectionString;
sqlConn = new SqlConnection(connString);
sqlCmd = new SqlCommand();
sqlAdapter = new SqlDataAdapter();
ds = new DataSet();
}
// ... 方法實作
}
public DataSet GetDataSet(string queryString) {
sqlAdapter.SelectCommand = new SqlCommand(queryString, sqlConn);
sqlAdapter.Fill(ds, "TempTable");
return ds;
}
public DataSet GetDataSet() {
sqlAdapter.SelectCommand = new SqlCommand("SELECT * FROM abc", sqlConn);
sqlAdapter.Fill(ds, "TempTable");
return ds;
}
public SqlDataReader GetReader() {
sqlCmd.CommandText = "SELECT * FROM abc";
sqlCmd.Connection = sqlConn;
sqlConn.Open();
// CommandBehavior.CloseConnection: 關閉 Reader 時自動關閉連線
sqlReader = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
return sqlReader;
}
public void Update(string id, string field1, string field2 /*, ... */) {
sqlCmd.CommandText = @"UPDATE TableName
SET Field1 = @Field1, Field2 = @Field2
WHERE ID = @ID";
sqlCmd.Parameters.Clear();
sqlCmd.Parameters.AddWithValue("@Field1", field1);
sqlCmd.Parameters.AddWithValue("@Field2", field2);
sqlCmd.Parameters.AddWithValue("@ID", id);
sqlCmd.Connection = sqlConn;
sqlConn.Open();
sqlCmd.ExecuteNonQuery();
sqlConn.Close();
}
public void Delete(string id) {
sqlCmd.CommandText = "DELETE FROM abc WHERE ID = @ID";
sqlCmd.Parameters.Clear();
sqlCmd.Parameters.AddWithValue("@ID", id);
sqlCmd.Connection = sqlConn;
sqlConn.Open();
sqlCmd.ExecuteNonQuery();
sqlConn.Close();
}
<connectionStrings>
<add name="MyDB"
connectionString="Server=.;Database=TestDB;Integrated Security=SSPI"
providerName="System.Data.SqlClient" />
</connectionStrings>
DataSource (業務物件)AllowPaging="true"、PageSize="10"AllowSorting="true"EnableSortingAndPagingCallbacks="true" (AJAX 回呼模式)Parameters.AddWithValueusing 區塊或 try/finally 確保關閉Command、Adapter、Connection 實作 IDisposableSqlException 記錄錯誤碼與訊息