【问题标题】:Handle a Char value from database处理数据库中的 Char 值
【发布时间】:2012-04-29 23:05:32
【问题描述】:

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

【问题讨论】:

  • 请不要在标题前加上“C# ASP.NET”之类的前缀。这就是标签的用途。

标签: c# asp.net char


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    要在 C# 方面解决此问题,请在比较之前Trim() 您的值:

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

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

    【讨论】:

      【解决方案3】:

      除了@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
      

      结果集

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 2016-11-10
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多