我将char值保存在“char(10)”类型下的表中。 当我尝试获取表中行的值时,我执行以下操作:
DataTable table = MyAdoHelper.ExecuteDataTable(GlobalVar.dbName, Query);
Ado助手只是一种从表中提取数据的工具,没什么特别的。
当我做下一个时:
string MemberGender = (table.Rows[0]["member_gender"].ToString() == "m") ? "Male" : "Female";
但即使在数据库中有一个'm',MemberGender也总是“女性”。
我该如何处理char值?
答案 0 :(得分:0)
“m”与“M”不同。它可能在数据库中是相同的,但不是在C#中。
答案 1 :(得分:0)
Char
值用空格填充,因此实际得到的是"m "
。在SQL Server上,可以使用SET ANSI_PADDING语句打开和关闭此行为(对于可空字符)。
要在C#端修复此问题,请在比较之前Trim()
您的值:
... table.Rows[0]["member_gender"].ToString().Trim() == "m" ...
或者,通过将数据类型更改为Char(1)
或Varchar(10)
来修复数据库架构。
答案 2 :(得分:0)
除了@Heinzi和@JonSaunders的回复
在数据库级别处理它?原因是,在数据库中将它与Code Behind操作进行比较的速度更快,而且非灵敏度在那里是加点。
假设数据库是Sql Server
。
create table #t
(
Nam char(10)
)
Insert into #t(Nam)Values('M')
Insert into #t(Nam)Values('F)
Select Case When Nam = 'm' Then 'Male' Else 'Female' End As Member_Gender From #t
Drop Table #t