我目前是一名學生,學習C#和數據庫。不幸的是,我要去的學校並沒有使用C#與數據庫進行交互。所以我正在自己學習。處理數據庫時的最佳做法
我寫了一些使用數據庫和C#的小程序。它們運行良好,並且做我想要的,即使它們可能沒有正確構建。我正在寫一個新的程序,這將是我最大的,我希望它是正確的。該程序有許多窗體,類和包含18個表的SQL數據庫。我現在組織的方式是,我的窗體通常會創建一個類的新實例。讓我們說客戶。當點擊保存按鈕時,會創建一個新客戶,分配給這些屬性的值,並將該對象與組合框一起發送到客戶類中的公共方法,或者與我一起工作的任何東西。我也有一個名爲Database的類,它具有我寫的所有SQL查詢。這樣一切都是一個地方。我通常會發送數據庫類作爲參數的字典來填充,然後在客戶類中使用它來填充組合框。我沒有使用數據集,數據表或類似的東西。我直接與數據庫工作。
這被認爲是可以接受的,還是不在現實世界中?我真的希望在不久的將來能夠以此爲生,所以我想正確地學習。我自己做了很多閱讀,而且我看到人們如何做這件事的方式有很多不同。如果有人也有任何好閱讀的建議,我會很感激。
編輯,添加的代碼段爲每一個建議
在我的窗體中添加一個新的客戶,我對他們把他們的地址的位置。我有兩個組合框,一個是國家,一個是城市。我對城市進行了過濾,以便它僅顯示處於狀態組合框中選定狀態的城市。所以在我的表單類中,我有一個方法來改變狀態框索引。它看起來像這樣。
private void cboStates_SelectedIndexChanged(object sender, EventArgs e)
{
Address.GetFilteredCities(cboCity, (int)cboStates.SelectedValue);
}
cboCity是城市組合框。在地址類中,我有一個看起來像這樣的方法。 Cities是一個字典,其中包含關鍵字的整數,以及該值的字符串。 int是城市的ID,保存在我的數據庫中。該值是城市名稱,顯示在組合框中。
public static void GetFilteredCities(ComboBox box, int stateID)
{
cities.Clear();
Database.GetFilteredCities(cities, stateID);
if (cities.Count > 0)
{
box.DataSource = new BindingSource(cities, null);
box.ValueMember = "Key";
box.DisplayMember = "Value";
}
else
{
box.DataSource = new BindingSource(null, null);
}
}
數據庫類
然後,
public static void GetFilteredCities(Dictionary<int, string> cities, int stateID)
{
try
{
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
SqlCommand grab = new SqlCommand("SELECT CityID, CityName FROM tblCities WHERE StateID = " + stateID, conn);
using (SqlDataReader read = grab.ExecuteReader())
{
while (read.Read())
{
cities.Add((int)read["CityID"], read["CityName"].ToString());
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error getting cities", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
是否有這樣做的一個比較正確的做法,或這被認爲是一個可以接受的方式?我傾向於在我的方式卡住,所以如果有更好的方式,我寧願現在學習。例如,出於任何原因,使用dataadapter和datatable更好?在使用該程序的同時修改數據表,然後不會將它們提交到數據庫,直到您出於任何原因更好地退出該程序?
我沒有投票,但認爲這個問題過於寬泛和基於意見。更具體一點,展示代碼或多種方式,並尋求更合理的具體原因,以便爲什麼某件事情好或不好。 –
這樣做有幾乎無限的方式,這就是爲什麼編程需要一定程度的創造力。一般來說,它是可以接受的,直到它不工作。所以如果它有效並且你沒有問題,那麼你並沒有真正的問題。我的評論與你的問題一樣寬泛,但你明白了。 – SeanOB