【问题标题】:C# sqlDataReader.Read() causing Convertion failed errorC# sqlDataReader.Read() 导致转换失败错误
【发布时间】: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.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();
}

很抱歉代码是纯文本。我需要问一个问题以获得更多声誉,但除此之外我没有其他相关问题要问。

【问题讨论】:

  • 如果可以编辑,编辑问题并添加执行的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


【解决方案1】:

当数组数据从 0 开始时,您的计数是否从 1 开始?

【讨论】:

    【解决方案2】:

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

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

    尝试使用 Int32.TryParse。您应该能够捕获和处理 NULL 值。

    【讨论】:

      猜你喜欢
      • 2015-09-02
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      相关资源
      最近更新 更多