2012-03-27 54 views
1

我使用C#创建了一个UDT,并使用.NETFW 2.0编译它。我把它添加到成功的数据库,可以看到它时,我“SELECT * FROM sys.assemblies”无法使用CREATE TYPE在Sql Server中加载CLR UDT

我现在想消耗在装配中定义的UDT如下:

CREATE TYPE dbo.SourceLocation 
EXTERNAL NAME MyAssembly.[example.com.SourceLocation]; 

然而,我这样做的时候,我得到一个错误如下:

消息6244,级别16,状态1,第1行的大小(0), “MyAssembly.example.com.SourceLocation”不有效范围。 大小必须为-1或什么我可以做1和8000

任何想法之间的数字错了吗?当我运行ildasm.exe时,我可以看到该类型。

我使用命令行添加了程序集。我没有为此使用VS数据库项目。

回答

2

你有源文件吗? 检查MaxByteSize属性? 如果不存在,则添加它或更改值,例如

[Serializable] 
[SqlUserDefinedType(Format.UserDefined, 
IsByteOrdered = true, MaxByteSize = 32)] 
[CLSCompliant(false)] 
public struct Currency : INullable, IComparable, IBinarySerialize 
{ 
+0

谢谢罗素。这对我有效。除了你的代码,我不得不将MaxByteSize更改为-1,因为我正在存储大字符串。 – feroze 2012-03-27 22:28:36