C# sqlDataReader.Read() вызывает ошибку преобразования не удалось

Запрос к базе данных работает нормально и возвращает строки. Но в какой-то момент, примерно через 2 минуты после запуска программы, она вылетает с ошибкой ниже.

Необработанное исключение: System.Data.SqlClient.SqlException: преобразование не выполнено при преобразовании значения varchar 'NULL' в тип данных int.
в System.Data.SqlClient.SqlConnection.OnError(исключение SqlException, логическое breakConnection, действие1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) при System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, булева callerHasConnectionLock, булева asyncClose) при System.Data.SqlClient.TdsParser.TryRun (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) в System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows) в System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more) в System.Data.SqlDateReader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader.Reader).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 ответа

Проблема может заключаться в том, что выполняемое преобразование невозможно. INT никогда не может быть NULL, он должен быть 0. Вы также не можете преобразовать значение varchar / string значения NULL в int, поскольку оно не представляет целочисленное значение.

Как описано в исключении, которое вы получили.Ошибка преобразования при преобразовании значения varchar 'NULL' в тип данных int.

Попробуйте использовать Int32.TryParse. Вы должны быть в состоянии поймать и обработать значение NULL.

Может быть, ваш счет начинается с 1, когда данные массива начинаются с 0?

Другие вопросы по тегам