提问者:小点点

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


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

未处理的异常:System.data.SqlClient.SqlClient.SqlInternalConnection.OnError(SqlCeption异常,Boolean breakConnection,Action1wrapCloseInAction)处的System.data.SqlClient.TdSparser.ThrowExceptionandWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)处的System.data.SqlClient.TdSparser.TryRun(RunBehavior Run)M.main(string[]args)在C:\users\ari.downey\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开始时,你的计数会不会从1开始?

匿名用户

这里的问题可能是正在进行的转换是不可能的。INT永远不能为空,它必须为0。您也不能将“null”的varchar/string值转换为int,因为它不表示整数值。

如您得到的异常所述。将varchar值“NULL”转换为数据类型int时转换失败。

尝试使用int32.tryparse。您应该能够捕获并处理空值。