【发布时间】:2017-09-14 12:19:39
【问题描述】:
数据库查询工作正常并返回行。 但是在某个时候,在运行程序大约 2 分钟后,它崩溃并出现以下错误。
未处理的异常:System.Data.SqlClient.SqlException:转换 将 varchar 值“NULL”转换为数据类型 int 时失败。
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler、SqlDataReader 数据流、 BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) 在 System.Data.SqlClient.SqlDataReader.TryHasMoreRows(布尔值& moreRows) 在 System.Data.SqlClient.SqlDataReader.TryReadInternal(布尔 setTimeout, Boolean & more) at System.Data.SqlClient.SqlDataReader.Read() 在 TrackChanges.Program.Main(String[] args) 在 C:\Users\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,如果不能,将其添加为评论以便可以添加到问题中
-
未处理的异常:System.Data.SqlClient.SqlException:将 varchar 值“NULL”转换为数据类型 int 时转换失败。。你必须检查
null -
查询 SQL 数据库时,应在查询中使用参数。否则,驱动器会尝试猜测数据类型,有时会猜错。这就像在 Excel 工作簿中使用 GENERAL 单元格类型。
-
它只是 select * from table where id = "";
-
@jdweng,我有一个 select 语句,它通过 Id 选择行。这是你的意思吗?
标签: c# sql type-conversion sqldatareader