我有一些与SqlServer 2012数据库交互的C#代码。它使用基于大型复杂SQL查询创建的SqlDataReader
。想象一下:
SqlCommand command = new SqlCommand(
"SELECT <a zillion fields>...",
connection);
SqlDataReader reader = command.ExecuteReader();
while (reader.HasRows)
{
while (reader.Read())
{
// do something
}
reader.NextResult();
}
}
当它执行Read
操作时,它会抛出:
System.Data.SqlClient.SqlException (0x80131904): Error converting data type varchar to bigint
我认为我找到了罪魁祸首。有没有办法从SqlException获取更多信息,特别是哪个列/字段导致了问题?
为了澄清,我可以(并且确实)手动识别潜在的问题。我的问题是我是否可以让SqlServer告诉我问题所在,所以我不必手动查看数以万计的字段。
答案 0 :(得分:1)
设置一个try ... catch然后遍历每一列,这样你就可以找出罪魁祸首。例如:
while ( reader.HasRows )
{
for( int index = 0; index < reader.FieldCount; index ++ )
{
fields[ reader.GetName( index ) ] = reader.GetString( index );
}
}
答案 1 :(得分:0)
这是一个包吗?
我会在您的代码中使用Ctrl + F表示Int64中的项目并查看它们的发送位置。存在一个错误,其中输入与输出的数据类型不同,反之亦然。检查DataSource以确保数据类型也排成一行。