0

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

4

3 回答 3

0

除了@Heinzi 和@JonSaunders 回复

在数据库级别处理它?原因是,它在数据库中与代码隐藏操作相比更快,并且案例非敏感性是加分点。

假设数据库是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

结果集

在此处输入图像描述

于 2012-04-18T14:18:03.520 回答
0

Char值用空格填充,所以你实际得到的是"m         ". 在 SQL Server 上,可以使用SET ANSI_PADDING语句打开和关闭此行为(对于可为空的字符) 。

要在 C# 端解决这个问题,Trim()在比较之前你的值:

... table.Rows[0]["member_gender"].ToString().Trim() == "m" ...

Char(1)或者,通过将数据类型更改为或来修复您的数据库架构Varchar(10)

于 2012-04-18T14:12:37.670 回答
0

“m”与“M”不同。它在数据库中可能相同,但在 C# 中则不同。

于 2012-04-18T14:08:59.020 回答