您的位置:首页 > 数据库

SQL2005 CLR: UDT用户定义类型 part2

2004-08-05 15:33 309 查看
[本文代码仅作为针对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的数据库可以快速创建输入、报表等画面,甚至自动生成,或者构造一个万能画面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: