2

私は CLR UDT を初めて使用し、ほとんどの場合は大丈夫だと思いますが、現在、行に正しい値が表示されないという非常に厄介な問題があります。性別データ型があり、「男性」または「女性」を入力しましたが、結果ウィンドウの値はそれぞれ「0x044D616C65」および「0x0646656D616C65」と表示されます。ここに私のUDTがあります:

[Serializable]
[SqlUserDefinedType(Format.UserDefined, IsByteOrdered = true, MaxByteSize = 512)]
public struct Gender : INullable, IBinarySerialize
{
    private bool m_Null;
    private SqlString genderName;

    public override string ToString()
    {
        return Convert.ToString(genderName);
    }

    public bool IsNull
    {
        get { return m_Null; }
    }

    public static Gender Null
    {
        get
        {
            Gender h = new Gender();
            h.m_Null = true;
            return h;
        }
    }

    public static Gender Parse(SqlString s)
    {
        if (s.IsNull)
        {
            return Null;
        }
        Gender u = new Gender();

        bool isValid = false;
        string str = s.ToString().Trim();
        if (str.StartsWith("M") || str.StartsWith("F"))
        {
            isValid = true;
        }

        if (isValid)
        {
            u.genderName = new SqlString(str);
        }
        else
        {
            throw new SqlTypeException("Gender not valid");
        }

        return u;
    }

    public void Write(BinaryWriter writer)
    {
        writer.Write(genderName.ToString());
    }

    public void Read(BinaryReader reader)
    {
        genderName = new SqlString(reader.ReadString());
    }
}

編集

明確にする画像:

テーブルデザイン

SQL 結果ビュー

4

2 に答える 2

1

このリンクで答えを得ました。ダン・グスマンは次のように書いています。

SQL Server は、既定で SQLCLR 型のシリアル化されたバイナリ値を返します。SSMS などのアドホック クエリ ツールで表示可能な値が必要な場合は、列で ToString メソッドを使用する必要があります。

 SELECT *, MySqlClrUdt.ToString() FROM Customers;
于 2012-08-20T23:42:12.983 に答える
0

Visual Studio 2010 を使用していると仮定します。問題は、結果を「16 進数」として表示するように VS を構成したことです。これを変更するには、結果ビュー (変数値が表示されている小さなウィンドウ) で右クリックし、チェックを外し hexadecimal view ます。

あなたは私があなたに言っていることを写真で見ることができます:

ここに画像の説明を入力

(私のVSはスペイン語で、英語では「16進表示」のようなものになります

また、ツールバーでこのオプションをチェックすることもできます (デバッグ中のみ)。

ここに画像の説明を入力

于 2012-06-23T04:20:55.270 に答える