处理数据库中的Char值

时间:2012-04-18 14:02:59

标签: c# asp.net char

我将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值?

3 个答案:

答案 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

结果集

enter image description here