【问题标题】:ToString() of SQL CLR UDT gives a strange resultSQL CLR UDT 的 ToString() 给出了一个奇怪的结果
【发布时间】:2012-06-25 08:37:15
【问题描述】:

我是 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());
    }
}

编辑

图片澄清:

【问题讨论】:

    标签: c# .net sql-server sqlclr user-defined-types


    【解决方案1】:

    我得到了答案in this link。丹·古兹曼写道:

    默认情况下,SQL Server 返回 SQLCLR 类型的序列化二进制值。如果您想要 SSMS 等临时查询工具的可显示值,则需要在列上使用 ToString 方法:

     SELECT *, MySqlClrUdt.ToString() FROM Customers;
    

    【讨论】:

      【解决方案2】:

      假设您使用的是 Visual Studio 2010。 问题是您将 VS 配置为将结果视为“十六进制”。 您可以在结果视图(当您看到变量值时的那个小窗口)中右键单击来更改此设置,然后取消选中 hexadecimal view 您可能通过快捷方式激活它,而您没有注意到

      你可以在图片中看到我在告诉你的内容:

      (我的 VS 是西班牙文,英文是“Hexadecimal View”

      您也可以在工具栏中检查此选项(仅在调试时)

      【讨论】:

      • 对不起,我应该更清楚。我在谈论 SQL Management Studio 中的“结果视图”。我还不确定如何在 Visual Studio 中调试 SQL 函数。还是谢谢。
      猜你喜欢
      • 2013-12-19
      • 2018-12-30
      • 2021-08-13
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      相关资源
      最近更新 更多