我正在开发一个 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("--------------------------------------------");
}
}