0

「char(10)」タイプでchar値をテーブルに保存します。テーブル内の行の値を取得しようとすると、次のようになります。

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

「m」は「M」と同じではありません。データベースでは同じかもしれませんが、C#では同じではありません。

于 2012-04-18T14:08:59.020 に答える
0

Char値には空白が埋め込まれているため、実際に取得されるのは"m         "です。SQL Serverでは、 SET ANSI_PADDINGステートメントを使用して、この動作のオンとオフを切り替えることができます(null許容文字の場合) 。

これをC#側で修正するには、Trim()比較する前の値:

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

Char(1)または、データ型をまたはに変更してデータベーススキーマを修正しますVarchar(10)

于 2012-04-18T14:12:37.670 に答える
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

ResultSet

ここに画像の説明を入力してください

于 2012-04-18T14:18:03.520 に答える