【问题标题】:Does boolean.ToString() behave differently between .NET 2.0 & .NET 3.5boolean.ToString() 在 .NET 2.0 和 .NET 3.5 之间的行为是否不同
【发布时间】:2011-04-15 15:02:19
【问题描述】:

我在工作中继承了一段代码,我刚刚注意到它有一个相当琐碎但奇怪的小怪癖。所以也许有人可以帮我设置干净的 .NET 2.0 环境来测试它。

有一个 SQL2K5 表包含一个名为 IsEnabled BIT NOT NULL 的列

有一个从该表中选择的存储过程

有一段 C# 代码,使用 SQL Reader 调用 SPROC,循环遍历结果行,并将其中一些信息写入日志文件以及执行其他操作。

using (SqlDataReader reader = DAL.SqlHelper.ExecuteReader(connStr, "usp_MySproc"))
{
    while (reader.Read())
    {
         //code to do stuff...

         string s = reader["IsEnabled "].ToString(); //exactly like this...

         //code to concatenate `s` with other values
         //log it all to file
    }
}

奇怪的是,在一些较旧的日志文件中,该值被写为 10,而在较新的日志文件中,它被写为 truefalse

所以发生了以下其中一件事情。它是由以下原因引起的:

  1. 有人更改代码
  2. 有人将表中的数据类型从 int -> bit 更改
  3. 有人将 sproc 中的数据类型从 int -> bit 更改(可能其中的强制转换/转换已被删除)
  4. 几个月前在我们所有的生产服务器上安装了 .NET 3.5,日期似乎与日志文件的更改一致,

在过去的一个小时左右,我在 google 上搜索 .net 2.0 和 .net 3.5 之间的变化,但什么都没有。

任何人都可以对此有所了解吗?

【问题讨论】:

  • 您的版本控制系统的日志显示什么?代码被修改了吗?根据文档,所有版本的输出都应为TrueStringFalseString(即“True”或“False”,大写),并且不太可能更改。
  • 这就是事情...... SVN 没有变化,版本没有异常,DLL 修改,我相信我的团队。 DBA 也没有更改表或存储过程的记录(这并不是说他没有)。这不是一个大问题,它没有破坏任何东西......这很奇怪。

标签: sql-server .net-3.5 .net-2.0 sqldatareader boolean


【解决方案1】:

您可以为 .NET 2.0 重新构建代码并运行测试以查看您现在拥有的代码库是否输出 1/0 或 true/false。那应该为您提供答案。此外,在这种情况下,您调用的并不是真正的 boolean.ToString() 。它是数据读取器,使用默认集合和强制转换。可能是 datareader 改变了在对它们调用 string 时输出位字段的方式。

【讨论】:

  • 试过了...重新编译以针对 2.0 框架。相同的真/假输出行为
  • 您的假设并不完全正确。 SqlDataReader.Item 返回object,因此代码在返回的项目上调用虚拟object.ToString() 方法,而不是数据读取器ToString 方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2011-06-28
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多