[本文代码仅作为针对SQL2005的测试用途,仅供参考]

现在来探索一下UDT的应用:

           string str = Properties.Settings.Value.SteevenConnection;
            System.Data.SqlClient.SqlConnection conn 
= new SqlConnection(str);
            SqlCommand cmd 
= conn.CreateCommand();
            cmd.CommandText 
= "select * from dbo.MyUser";
            conn.Open();
            SqlDataReader r 
= cmd.ExecuteReader();
            r.Read();

            
Type t = r.GetFieldType(2); //Type2
            object o = r.GetValue(2); //instance of Type2
            SqlString st = ((Type2)o).Hello("test"); //Hello: 3

以上代码要求引用包含Type2定义的DLL, 引用包System.Data.SqlClient
说明客户端查询到的的确是Type2的实例。

既然得到的是一个类的实例,那么我们可以把很多附加信息通过Type2从数据库传递给客户端。

以前在构造一个DataGrid时,列需要可读的Title, 宽度等信息,一般做法是手工指定,即使开发工具能够自动构造列信息,也惨不忍睹。如果采用了UDT, 我们可以让UDT类这样写:
public class Type2 : IDescription{
  ....
  public Title{
    get{
      switch(Thread.CurrentThread.UICulture):
        case “cn-zh“: return “姓名“; break;
        case “en-us“: return “Name“; break;
      }
   }
  ....
}
这样在拿到结果集构造画面时,就可以取得和当前语言对应的Title了。
同样,还可以让UDT实现IValidator,提供对输入的验证,并且提供友好的错误信息。甚至可选信息。

可能实现的功能有:
标题、业务描述、帮助、可选值、验证、Input控件(webform/winform)。。。和SAP里面的域定义类似。

完全基于以上UDT的数据库可以快速创建输入、报表等画面,甚至自动生成,或者构造一个万能画面。

posted on 2004-08-05 15:33  steeven  阅读(926)  评论(0编辑  收藏  举报