对数据库的查询工作正常并返回行。 但是在某些时候,运行程序大约需要2分钟,它会崩溃并显示下面的错误。C#sqlDataReader.Read()导致转换失败错误
未处理的异常: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, Action
1 wrapCloseInAction)在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔callerHasConnectionLock,布尔asyncClose)在 系统.Data.SqlClient.TdsParser.TryRun(runBehavior runBehavior, 的SqlCommand cmdHandler,SqlDataReader的数据流, BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,布尔& dataReady)在 System.Data.SqlClient.SqlDataReader.TryHasMoreRows(布尔& moreRows) 在系统.Data.SqlClient.SqlDataReader.TryReadInternal(布尔 setTimeout的,布尔&更多)处 TrackChanges.Program.Main(字串[] args) System.Data.SqlClient.SqlDataReader.Read()在 C:\用户\ ari.downey \ 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();
}
我道歉代码是纯文本。我需要提出一个问题来获得更多的声誉,但除此之外,我没有相关的问题要问。
如果可以编辑,编辑问题并添加执行的SQL(如果不能),请将其添加为注释,以便将其添加到问题中 – bradbury9
未处理的异常:System.Data.SqlClient.SqlException:**转换 将varchar值“NULL”转换为数据类型int。**时失败。你必须检查'null' –
查询SQL数据库时,应该在查询中使用参数。否则,驱动器会尝试猜测数据类型,有时会猜测错误。这就像在excel工作簿中使用GENERAL细胞类型一样。 – jdweng