我是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());
}
}
修改
图片澄清:
答案 0 :(得分:1)
我得到了答案in this link。 Dan Guzman写道:
SQL Server默认返回SQLCLR类型的序列化二进制值。如果您想要像SSMS这样的即席查询工具的可显示值,则需要在列上使用ToString方法:
SELECT *, MySqlClrUdt.ToString() FROM Customers;
答案 1 :(得分:0)
假设您使用的是Visual Studio 2010。
问题是您配置VS以将结果视为“十六进制”。
您可以在结果视图中右键单击(在看到变量值时显示该小窗口),然后取消选中 hexadecimal view
您可能会通过快捷方式激活它,但您没有注意到
你可以在图片中看到我告诉你的内容:
(我的VS是西班牙文,英文版就像“Hexadecimal View”
您也可以在工具栏中选中此选项(仅在您正在调试时)