2013-02-18 84 views
0

我的WinForms C#/ .NET應用程序需要一個表/網格控件來向最終用戶顯示記錄。記錄很簡單,只包含兩個字段,一個字符串和一個日期/時間字段。我需要堅持數據,我想知道最有效的控制和存儲後端將使用什麼。數據不重要(即 - 不是健康或財務記錄,或任何需要廣泛安全或任何加密的敏感內容)。C#中持久表/網格的正確解決方案不需要完整的數據庫解決方案?

迄今爲止發現的一種解決方案是DataGrid控件與SQL Server Compact Edition結合使用。我瞭解從本教程此解決方案:

http://www.dotnetperls.com/datagridview-tutorial

看來,雖然這可能是矯枉過正了我的申請。另外,我很擔心安裝SQL Server CE的複雜性,特別是當它安裝過程中,管理員對用戶帳戶的權限問題:

http://msdn.microsoft.com/en-us/library/aa983326(v=vs.80).aspx

有一個表或網格控制內置文件加載/保存功能,它使用簡單的磁盤文件作爲存儲方法,可能是逗號分隔的ASCII文件?我想要一些我仍然可以使用SQL(通過LINQ)進行交互的東西。另外,我希望這可以透明地完成。也就是說,如果我想稍後升級到SQL數據庫引擎解決方案,那麼與我的數據接口的代碼將不會更改(當然也可能是數據庫打開/創建代碼除外)。

還是我還不如干脆咬咬牙,與SQL Server CE或也許SQLite的打算:

Good embedded database solution (like SQLite) for .Net

如果您有關於安裝問題和易用性的任何警告或軼事,他們會讚賞。

回答

2

在我的項目中,我們使用Object數據源。網格可以像數據表一樣容易綁定到對象集合。您可以使用簡單的序列化引擎來存儲/恢復數據(XmlSerializer相當容易實現)。創建一個基本對象,使用List或BindingList作爲數據集,並在需要時在後端序列化/反序列化它。

List和BindingList都支持Linq查詢。

稍後添加數據庫保存就像編寫將對象保存到數據庫的代碼一樣簡單,而不是序列化代碼,根本不需要更改前端。

至於一個「正確」的解決方案來講......有這麼多不同的方式來做到這一點,它歸結爲個人喜好,以及可能的實際需要和預期未來的發展。我發現使用對象進行編碼更容易,因爲數據操作更容易,但如果您打算直接輸入記錄,則不需要數據操作,直接進入數據庫更容易。這隻取決於數據以及您計劃如何使用它。

+0

謝謝。你知道一個簡明的教程,演示你所建議的技術(一個帶有Object數據源的網格控件)嗎?我發現到目前爲止:http://tech.pro/tutorial/776/csharp-tutorial-binding-a-datagridview-to-a-collection – 2013-02-18 20:11:20

+1

該教程顯示了你需要知道的一切。 Object,PropertyChanged,BindingList等等。你可以聲明自定義列表實現並自己實現IBindingList接口,雖然這有點POTA! (在那裏,這樣做,不想再次這樣做)。查看一下XmlSerializer的基本實現,這應該是其他基礎知識來完成某些工作。 – Nevyn 2013-02-18 20:40:23

+1

比基礎知識稍微複雜一些,但它也包含這些內容。這個例子着重於屬性,它可以讓你看到你的對象生成的xml究竟是什麼樣的。在網絡之間來回傳遞(SOAP和其他類似的協議)時很方便。 http://www.codeproject.com/Articles/14064/Using-the-XmlSerializer-Attributes – Nevyn 2013-02-18 20:42:26

2

我強烈建議您使用嵌入式數據庫,因爲在不久的將來可以更容易地轉到完整的數據庫。 SQL Server CE是一個很好的選擇,如果你想變得更大,你可以簡單地去完整的SQL Server數據庫,只需對代碼進行最小的修改,SQL Server CE唯一的缺點是你需要安裝它,它需要除了.NET Framework 4之外,我沒有看到它的大問題。

+1

+1爲嵌入式數據庫路由。但請注意,此時SQL Store應用程序(以前稱爲Metro)不支持SQL CE。 Sqlite IS支持。如果Windows 8是潛在的目標平臺,請注意一點。 – 2013-02-18 20:29:59

+1

@chuex,謝謝,因爲他沒有提到WinRT或Windows應用商店應用,我假定他提到了完整的.NET開發,但是當然如果你的目標是WinRT,唯一支持的數據庫(截至目前)是SQLite,除非您想使用Web Services和OData,否則無法選擇更高級別的數據庫。 – Rafael 2013-02-18 20:38:36