Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server boolean.ToString()在.NET 2.0和.NET 2.0之间的行为是否有所不同。净额3.5_Sql Server_.net 3.5_.net 2.0_Sqldatareader_Boolean - Fatal编程技术网

Sql server boolean.ToString()在.NET 2.0和.NET 2.0之间的行为是否有所不同。净额3.5

Sql server boolean.ToString()在.NET 2.0和.NET 2.0之间的行为是否有所不同。净额3.5,sql-server,.net-3.5,.net-2.0,sqldatareader,boolean,Sql Server,.net 3.5,.net 2.0,Sqldatareader,Boolean,我在工作中继承了一段代码,我刚刚注意到它有一个相当琐碎但奇怪的小怪癖。所以也许有人可以帮我建立一个干净的.NET2.0环境来测试它 有一个SQL2K5表,其中包含一个名为IsEnabled BIT NOT NULL 有一个存储过程正在从该表中进行选择 有一段C#代码,它使用SQL读取器调用该存储过程,循环遍历结果行,并将部分信息写入日志文件以及执行其他操作 using (SqlDataReader reader = DAL.SqlHelper.ExecuteReader(connStr, "us

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

有一个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

所以发生了以下一件事。这是由于:

  • 有人在修改密码吗
  • 有人从int->bit更改表中的数据类型
  • 有人从int->bit更改存储过程中的数据类型(可能其中有一个cast/convert被删除)
  • 几个月前,我们在所有生产服务器上安装了.NET 3.5,日期似乎与日志文件中的更改一致
  • 在最后一个小时左右的时间里,我一直在搜索谷歌,寻找.NET2.0和.NET3.5之间的变化,但我没有发现任何东西


    有人能解释一下吗?

    您可以重新生成.NET 2.0的代码,并运行测试,看看您现在的代码库输出的是1/0还是真/假。这应该会给你答案。另外,在本例中调用的不是真正的boolean.ToString()。它是数据读取器,使用默认的收集和转换。可能是datareader更改了在调用to string时输出位字段的方式。

    版本控制系统的日志显示了什么?代码被修改了吗?根据文档,在所有版本中,输出应为
    TrueString
    False string
    (即大写的“True”或“False”),并且不太可能发生更改。这就是。。。SVN没有变化,版本没有异常,DLL修改,我信任我的团队。DBA也没有更改表或存储过程的记录(这并不是说他没有)。这不是一个大问题,它没有破坏任何东西。。。真奇怪,试过了。。。重新编译以针对2.0框架。相同的正确/错误输出行为你的假设不完全正确。返回
    object
    ,因此代码对返回的项调用虚拟
    object.ToString()
    方法,而不是数据读取器
    ToString
    方法。