2013-02-12 80 views
-2

我有一個字段作爲字符串存儲在數據庫中。它實際上是一個逗號分隔的字符串,我將其轉換爲長整型列表。的代碼做轉換的線條看起來有點像這樣:可以將數據存儲在數據庫中有時會導致數據損壞?

TheListOfLongs = (from string s in StringFromDB.Split(',') 
        select Convert.ToInt64(s)).ToList<long>(); 

創建數據庫存儲字符串的代碼如下所示:

return String.Join(",", TheListOfLongs.Select(x=> x.ToString()).ToArray()); 

這工作得很好,但你可以看到,如果出於某種原因,字符串出現問題,第一行代碼中的代碼中斷了Convert.ToInt64(s)

現在我知道我可以換這一切都圍繞着try聲明,但我的問題是這樣的:可以存儲和檢索數據庫中損壞的字符串的字符串(在這種情況下,我肯定需要try語句)或這是一個一萬億奇數類型的事件?

+1

記錄是什麼樣的「打破'Convert.ToInt64(s)'」? – Yuck 2013-02-12 19:07:55

+0

@Yuck:好吧,它不會中斷(現在)。這是一串以逗號分隔的數字:28983,3553,57523,5334,35543,4636343,16941,4223,53534 .... – frenchie 2013-02-12 19:09:39

+2

不,數據庫不會隨意地將背後的「數據損壞」。是的,非法數據可以進入數據庫,除非在「插入」或「更新」之前嚴格驗證它。 [GIGO](http://en.wikipedia.org/wiki/Garbage_in,_garbage_out)。是的,除非你絕對確定*沒有*會出現任何錯誤(着名的遺言!),你應該在適當的地方編碼正確的錯誤處理。恕我直言... – paulsm4 2013-02-12 19:13:19

回答

1

我不擔心損壞數據本身。但是,您絕對需要處理更一般的情況,即無法解析應該是數字數據的情況。

即使在最受控制的情況下,如果您無法處理數據,但您希望能夠提供條件,這是一種很好的編程實踐。這意味着你的應用程序是你需要決定的。用try..catch包裝聲明可以防止應用程序窒息,但如果解析列表稍後很關鍵,則可能不適用。

1

從數據庫中選擇不應損壞您的字符串。

如果連接在中間傳輸或其他類似事件中丟失,則會引發異常。

相關問題