我正在一个C#项目中,该项目从不同来源收集数据并将数据存储在SQL Server数据库中。我有时会得到String or binary data would be truncated.
非常烦人的错误。我想确定哪个列导致此错误并记录下来。除了检查参数长度,还有其他方法吗?
我所做的是,如果该varchar(50)
列为,则检查数据长度是否大于50。我感觉这就像是一种解决方案,想知道是否还有其他整洁的解决方案。
编辑
if(data1.Length>50) logIt("col1, data1, condition");
else if(data2.Length>80) logIt("col2, data2, condition");
else {
SqlParameter p1 = (new SqlParameter("@p1", DbType.String));
p1.Value = string.IsNullOrEmpty(data1) ? SqlString.Null : (object)data1;
s1.Parameters.Add(p1);
SqlParameter p2 = (new SqlParameter("@p2", DbType.String));
p2.Value = string.IsNullOrEmpty(data2) ? SqlString.Null : (object)data2;
s1.Parameters.Add(p2);
s1.ExecuteNonQuery("UPDATE mytable SET col1=@p1,col2=@p2 WHERE condition=@condition");
}
void logIt(string p){
using (StreamWriter writer = new StreamWriter("log.txt"))
{
writer.WriteLine("Caused by:"+ p);
writer.WriteLine(DateTime.Now);
writer.WriteLine("--------------------------------------------");
}
}
就我个人而言,我将始终对照包含要使用的数据的表检查所有参数。如果该表显示varchar(50),则我的参数应不超过50。假设您可以类似地在c#端限制参数定义。不允许用户输入超出您的表格字段可接受范围的信息。
如果要从其他数据库或Excel电子表格中提取数据,则可能会有一系列不同的问题。
首先,您需要仔细检查传入的数据,并确定您当前拥有的列大小对于所需内容而言是否太小。我经常发现,当数据太大时,该字段中的信息是垃圾,应该扔掉(例如,有关联系人的注释之类的东西放在电子邮件字段中,而不是电子邮件中)。您甚至可能要考虑是否应该验证某些字段中的输入数据。
如果需要保持大小并且不担心丢失多余的字符,则需要将数据转换为正确的大小,然后再将其插入数据库,或者需要创建一个异常过程以提取记录无法将其发送到数据库的异常表中,并将其返回给拥有待修复原始数据的人员。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句