UDT: user defined type. 简单说就是用自己开发的类作为数据库字段类型。
在VS2005的SQL2005 Server项目中增加User-Defined Type, 自动生成Type1, 简单修改如下:
using System;
using System.Data.Sql;
using System.Data.SqlTypes;

[Serializable]
[SqlUserDefinedType(Format.SerializedDataWithMetadata, MaxByteSize 
= 512)]
public class Type2 : INullable
{
    
public int v;
    
public override string ToString()
    
{
        
return v.ToString();
    }


    
public bool IsNull
    
{
        
get
        
{
            
return v == 0;
        }

    }


    
public static Type2 Null
    
{
        
get
        
{
            Type2 h 
= new Type2();
            
return h;
        }

    }


    
public static Type2 Parse(SqlString s)
    
{
        
if (s.IsNull || s.Value.ToLower().Equals("null"))
            
return Null;
        Type2 u 
= new Type2();
        
int.TryParse(s.ToString(),out u.v);
        
return u;
    }


    
public SqlString Hello(SqlString Param1)
    
{
        
return "Hello: "+v;
    }

}


注意:
     比如包含方法:ToString() / Parse(SqlString)
     增加了方法Hello()。

项目编译部署完毕。在定义表结构的时候就可以在类型选项表中看到自定义类型dbo.Type2。
在VS2005 Server Explorer View里面,编辑这个表,可以象普通类型一样输入数据,输入无效数字时会以0代替。说明Parse()方法被调用.
执行查询:SELECT     abc.Hello('x') FROM         dbo.[User] 返回:
Hello: 3
Hello: -33
说明Hello方法被成功调用。

不足:
  UDT重新编译部署时会报错,提示该类型已经被使用。在数据没有发生变化的情况下,这种检查似乎  有些多余。
好处:
  对数据提供自定义转换处理。
  可以用来包装杂七杂八的数据
  包装复杂结构数据(树形、列表)
  提供数据类型的辅助说明。

UDT的出现似乎否定了刚出生的XML字段类型。XML类型还有什么存在的理由呢?



参考:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql_ovyukonnetprogfeatures.asp
posted on 2004-08-05 15:08  steeven  阅读(1109)  评论(2编辑  收藏  举报