如何找到SqlException的原因0x80131904"错误转换数据类型"?

时间:2016-02-17 15:52:22

标签: c# sql-server

我有一些与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告诉我问题所在,所以我不必手动查看数以万计的字段。

2 个答案:

答案 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以确保数据类型也排成一行。