我决定在我的代码中删除一些 using 语句,这样我就可以捕获特定的异常并手动处理资源的处置。在实现新的 try/catch 块之后,我重构了一些代码以使其更具可读性和可维护性,我想知道它们是否已正确放置以完成手头的任务。
例子:
public static DataTable Select(string table, string[] column, Object operand)
{
DataTable dTable = null;
SQLiteConnection connection = null;
SQLiteCommand command = null;
SQLiteDataReader dReader = null;
//convert to array for arguments
StringBuilder query = new StringBuilder();
query.Append("select ");
for (int i = 0; i < column.Length; i++)
{
query.Append(column[i]);
if (i < column.Length - 1)
{
query.Append(",");
}
}
query.Append(" from ");
query.Append(table);
try
{
connection = new SQLiteConnection(_connectionString);
command = new SQLiteCommand(query.ToString(), connection);
dTable = new DataTable();
connection.Open();
dReader = command.ExecuteReader();
dTable.Load(dReader);
return dTable;
}
catch (SQLiteException sqle)
{
//Handle exception
}
finally
{
connection.Dispose();
command.Dispose();
dReader.Dispose();
dTable.Dispose();
}
return null;
}
在这个例子中,我只围绕 SQL 操作本身实现了 try/catch,我这样做是因为它确保可以注意到抛出的任何异常并正确处理资源。然后我注意到这使 for 循环对异常开放,尽管提供的索引器将受到保护并通过 GUI 创建。
我是否明智地将整个方法封装在 try/catch 语句中,还是我过于谨慎?您可以说我正在寻找管理语句本身位置的最佳实践。
谢谢你的时间!
编辑:
我知道 using 语句在处理资源的处置和管理方面是理想的,但是正如问题开头提到的,我希望能够捕获特定类型的异常,特别是那些从 SQLite 组件生成的异常。