2009-12-16 38 views
0

我正在研究一种采用csv文件并将数据放入sqlserver的软件。我现在测试它与坏数据,当我让一个数据字符串长(一行)被导入数据库中我得到的错误:字符串或二进制数据将被截断语句已终止。这是正常的,这就是我应该期待的。现在我想在更新数据库之前检测这些错误。有没有什么聪明的方法来检测这个?知道在更新数据库时是否会截断一个字符串

我的软件工作方式是我导入数据集中的每一行,然后向用户显示将要导入的数据。然后他可以点击一个按钮来进行实际更新。然后我做一个dataAdapter.Update(数据集,“东西”)来更新数据库。

问题在于错误行终止了所有更新并报告了错误。所以我想在我更新服务器之前检测错误,以便插入其他行。

谢谢

回答

1

您将不得不检查每一行的列。查看是否超过了数据库中指定的最大值,如果是,请将其排除在插入之外。

不同的解决方案是显式截断数据并插入截断的内容,这可以通过使用SubString来完成。

+0

问题是我不知道服务器上的varchar的大小。一个意思我知道它,但它可以改变客户端服务器,所以我不能假设一个长度。所以我需要一种方法来请求在服务器上的长度 – 2009-12-16 16:37:12

1

,我知道的唯一方法是预先检查信息架构的字符数限制:

Select 
    Column_Name, 
    Character_Maximum_Length 
From 
    Information_Schema.Columns 
Where 
    Table_Name = 'YourTableName' 
0

或者,如果你有你的数据库上开了一个记录,另一种解决方案是浏览字段对象使用其长度截断字符串。例如,使用ADO记录集/ VB代码,你可能会有这样的代码:

myRecordset.fields(myField) = left(myString, myRecordset.fields(myField).DefinedSize)