2017-04-18 12 views
0

データベースのクエリが正常に動作し、行が返されています。 しかし、ある時点で、プログラムの実行に約2分かかると、以下のエラーでクラッシュします。Convertion failedエラーの原因となるC#sqlDataReader.Read()

未処理の例外:System.Data.SqlClient.SqlException:データ型intにVARCHAR値 'NULL' を変換するときの変換 に失敗しました。 システムでSystem.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj、ブールcallerHasConnectionLock、ブールasyncClose)でSystem.Data.SqlClient.SqlConnection.OnError(SQLException例外、 ブールbreakConnection、アクション1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction)で
システムで.Data.SqlClient.TdsParser.TryRun(runBehavior runBehavior、 SqlCommandオブジェクトcmdHandler、SqlDataReaderのデータストリーム、 BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObj、ブール& DATAREADY) System.Data.SqlClient.SqlDataReader.TryHasMoreRows(ブール& moreRows)で Cで TrackChanges.Program.Main(文字列[] args)をで System.Data.SqlClient.SqlDataReader.Read()で.Data.SqlClient.SqlDataReader.TryReadInternal(ブール のsetTimeout、ブール&より):\ Users \ユーザーari.dow​​ney \ Documents \ Visual Studio 2015 \ Projects \ TrackChanges \ TrackChanges \ Program.cs:line 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(); 
} 

私はコードがプレーンテキストであることをお詫び申し上げます。私はより多くの評判を得るために質問をする必要がありますが、これ以外の質問はありません。

+0

質問を編集して実行できない場合は、質問に追加できるように質問を編集して追加してください。 – bradbury9

+0

未処理の例外:System.Data.SqlClient.SqlException:**変換 varchar値 'NULL'をデータ型intに変換すると失敗しました。**。ヌルを確認する必要があります –

+0

SQLデータベースを照会するときは、照会でパラメーターを使用する必要があります。それ以外の場合、ドライブはデータ型を推測しようとしますが、間違った推測をすることもあります。 ExcelブックのGENERALセルタイプのようなものです。 – jdweng

答えて

0

配列データが0から始まるときにカウントが1から始まることはありますか?

+0

どれが数えられますか? read.FieldCount()? – aDowney

0

ここでの問題は、変換が行われない可能性があります。 INTは決してになります。は、である必要があります。 'NULL'のvarchar/string値をintに変換することもできません。これは整数値を表していないためです。

あなたが持っている例外に記載されています。 varchar値 'NULL'をデータ型intに変換するときに変換に失敗しました。

Int32.TryParseを試してください。 NULLの値をキャッチして処理できるはずです。

関連する問題