Sql server boolean.ToString()在.NET 2.0和.NET 2.0之间的行为是否有所不同。净额3.5
我在工作中继承了一段代码,我刚刚注意到它有一个相当琐碎但奇怪的小怪癖。所以也许有人可以帮我建立一个干净的.NET2.0环境来测试它 有一个SQL2K5表,其中包含一个名为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
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
所以发生了以下一件事。这是由于:
有人能解释一下吗?您可以重新生成.NET 2.0的代码,并运行测试,看看您现在的代码库输出的是1/0还是真/假。这应该会给你答案。另外,在本例中调用的不是真正的boolean.ToString()。它是数据读取器,使用默认的收集和转换。可能是datareader更改了在调用to string时输出位字段的方式。版本控制系统的日志显示了什么?代码被修改了吗?根据文档,在所有版本中,输出应为
TrueString
或False string
(即大写的“True”或“False”),并且不太可能发生更改。这就是。。。SVN没有变化,版本没有异常,DLL修改,我信任我的团队。DBA也没有更改表或存储过程的记录(这并不是说他没有)。这不是一个大问题,它没有破坏任何东西。。。真奇怪,试过了。。。重新编译以针对2.0框架。相同的正确/错误输出行为你的假设不完全正确。返回object
,因此代码对返回的项调用虚拟object.ToString()
方法,而不是数据读取器ToString
方法。