包装时
using
您不必捕获异常情况(NET将为您释放资源,让您大放异彩)
// Dangerous practice: what if I put commandText "drop table MyTable"?
public static List<T> ExecuteQuery<T>(string connection,
string commandText,
Func<SqlDataReader, List<T>> myMethodName) {
//ToDo: Validate parameters here
using (var con = new SqlConnection(connection)) {
con.Open();
using (var cmd = new SqlCommand(commandText, con)) {
// IDataReader is IDisposable as well
using (var reader = cmd.ExecuteReader()) {
return myMethodName(reader);
}
}
}
}
然后我们要做的就是提供参数:
connectionString
,
commandText
和映射函数;让我们来做:
public List<Function> GetDeletedFunctions(string connectionString) {
//TODO: Validate connectionString here
return DbHelper.ExecuteQuery<Function>(
connectionString, // Connection String
@"SELECT * FROM Table ", // Query
(reader) => { // Map function
// When given reader, the map function creates list
List<Function> result = new List<Function>();
// Convert each record into Function instance and add them into the list
while (reader.Read()) {
Function item = new Function() {
Param1 = Convert.ToString(reader["Param1"]),
Param2 = Convert.ToString(reader["Param2"]),
}
result.Add(item);
}
// and return the list
return result;
}
)
}