代码之家  ›  专栏  ›  技术社区  ›  Eoin Campbell

做布尔.ToString()在.NET 2.0和.NET 3.5之间的行为不同

  •  0
  • Eoin Campbell  · 技术社区  · 14 年前

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

    有一段C代码,它使用SQL读取器调用存储过程,循环遍历结果行,并将一些信息写入日志文件以及执行其他操作。

    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
        }
    }
    

    奇怪的是,在一些较旧的日志文件中,该值以 1 或者 0 而在更新的日志文件中,它被写成 true 或者 false

    1. 有人将表中的数据类型从int->位更改为
    2. 有人将存储过程中的数据类型从int->位更改为其他位(可能其中的强制转换/转换被删除)

    我在google上搜索了一个小时左右,寻找.net2.0和.net3.5之间的变化,但什么都没有。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Paul Hadfield    14 年前

    您可以为.NET2.0重新生成代码并运行测试,以查看您现在的代码库是否输出1/0或true/false。这应该会给你答案。而且,也不是真的布尔.ToString()在这种情况下你要打电话。它是数据读取器,使用默认的收集和转换。可能是datareader更改了在调用ToString时输出位字段的方式。