さまざまなソースからデータを収集し、そのデータを SQL Server データベースに格納する C# プロジェクトに取り組んでいます。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("--------------------------------------------");
}
}