我在學習在線課程,並在課程中解釋如何從數據庫中檢索數據。創建連接和命令由類DbProviderFactories
完成。我理解課程中的代碼,但使用using
作爲連接,命令和讀寫器的必要條件嗎?此外,是否需要空檢查?代碼看起來很混亂,如果你的數據庫中有大量的模型(大陸,國家,貨幣......),它會需要大量的複製/粘貼,這是不好的?連接到基於我遵循的課程的數據庫
所以問題的確是,下面的代碼好壞有什麼可以改進?目標是使用SQLite作爲數據庫提供者。這是否適用於下面的方法?
public static ObservableCollection<Continent> GetContinents()
{
var continents = new ObservableCollection<Continent>();
var provider = ConfigurationManager.ConnectionStrings["DbConnection"].ProviderName;
var connectionString = ConfigurationManager.ConnectionStrings["DbConnection"].ConnectionString;
using (var connection = DbProviderFactories.GetFactory(provider).CreateConnection())
{
if (connection == null) return null;
connection.ConnectionString = connectionString;
connection.Open();
using (var command = DbProviderFactories.GetFactory(provider).CreateCommand())
{
if (command == null) return null;
command.CommandType = CommandType.Text;
command.Connection = connection;
command.CommandText = "SELECT * FROM Continent";
using (var reader = command.ExecuteReader())
while (reader.Read())
continents.Add(new Continent(reader["Code"].ToString(), reader["EnglishName"].ToString()));
}
}
return continents;
}
爲什麼你會認爲這將需要大量的複製粘貼..首先你的CommandText應該作爲變量/參數傳遞給你決定'代碼重用'的方法改變方法簽名來處理SqlCommand,SqlParameter等事情。使用語句用於自動處理對象,請嘗試使用'MSDN'並對您的結尾做更多的研究,以便您可以瞭解在線課程以外的情況。在現實世界。 – MethodMan
也有更容易的方法來做你想要在你自己的自定義DBUtils類中做的事情。 – MethodMan
你可以在這裏消除while循環,並使用'DataAdapter.FIll()'方法將內容返回給一個'DataTable'你的代碼需要一些嚴重的'Re-Factoring' – MethodMan