C#sqlDataReader.Read()导致转换失败错误

时间:2017-04-18 15:10:04

标签: c# sql type-conversion sqldatareader

数据库的查询工作正常并返回行。 但是在某些时候,运行程序大约2分钟后,它崩溃了下面的错误。

  

未处理的异常:System.Data.SqlClient.SqlException:转换   转换varchar值时失败' NULL'数据类型int。
  在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,   布尔值breakConnection,Action 1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction)at   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject   stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)at   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,   SqlCommand cmdHandler,SqlDataReader dataStream,   BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject   stateObj,布尔& dataReady)at   System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)   在System.Data.SqlClient.SqlDataReader.TryReadInternal(布尔值   setTimeout,Boolean&更多)   System.Data.SqlClient.SqlDataReader.Read()at   TrackChanges.Program.Main(String [] args)in   C:\ Users \ ari.dow​​ney \ Documents \ Visual Studio   2015 \ Projects \ TrackChanges \ TrackChanges \ Program.cs:第31行按任意   关键是继续。 。

using (SqlCommand cmd = new SqlCommand(query, conn))
{
    conn.Open();
    SqlDataReader read = cmd.ExecuteReader();

    while (read.Read())
    {
        if (read[4].ToString().ToUpper() != columns[4].ToUpper())
        {
            for (int i = 0; i < read.FieldCount; i++)
                Console.Write(read[i] + " || " + columns[i] + " ");
            Console.WriteLine(" ");
        }
    }                       
    conn.Close();
}

我很抱歉代码是纯文本。我需要提出一个问题来获得更多的声誉,但除此之外我没有任何相关的问题要问。

2 个答案:

答案 0 :(得分:0)

当数组数据从0开始时,你的计数是否从1开始?

答案 1 :(得分:0)

这里的问题可能是无法进行转换。 INT永远不能 NULL ,它必须是 0 。您也不能将'NULL'的varchar / string值转换为int,因为它不代表整数值。

正如您所获得的例外情况所述。 将varchar值'NULL'转换为数据类型int时,转换失败。

尝试使用 Int32.TryParse 。您应该能够捕获并处理 NULL 值。

相关问题