2013-02-12 85 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

从数据库中选择不应损坏您的字符串。

如果连接在中间传输或其他类似事件中丢失,则会引发异常。

相关问题