关于强类型DataSet的一些小建议

来源:互联网 发布:python 改变图片颜色 编辑:程序博客网 时间:2024/05/01 13:38
强类型的DataSet可以帮助我们快速的建立数据访问层,它的简易性使得我们可以在小的项目中广泛的使用它。但是它也有一些小的缺陷,这里和大家共同讨论下它到底有哪些缺陷,以及我们怎么去避免这些问题。

1) 在一个query中,它只支持对本表的操作,不支持对多表的操作。在这种情况下,我们可以自己写一个stored procedure,然后新建一个TableAdapter,这样它便会帮我们生成一个新的逻辑实体表,表内存储的是stored procedure中返回的列。

2) 数据库端的任何改动都不会自动update到强类型的DataSet. 这个功能可能会在以后的版本中得到解决,在ORCAS中,强类型DataSet和LINQ仍然都没有实现自动更新schema的功能。既然它不能自动更新schema,我们只能手动删除这个表然后重新添加这个表(手动改字段的属性也可以,但是容易造成错误)。这样的话所有写的query都将会丢失。为了避免这样的情况,我们可以将所有的query写成存储过程,这样即使在表删除的情况下,我们仍然可以轻松再添加一遍。

3) 强类型的DataSet在获取存储过程的返回值(e.g. return 1)方面有点问题。我们不能方便的像函数一样得到 int returnValue = (int) da.CallSP(); 为了得到它的返回值,我们需要实现一个生成的TableAdapter的partial类,然后加上这个自定义的方法:
  1. partial class UsersTableAdapter
  2. {
  3.     public object GetReturnValue(int commandIndex)
  4.     {
  5.         return this.CommandCollection[commandIndex].Parameters[0].Value;
  6.     }
  7. }
复制代码
这个commandIndex的值就是你的方法所在的index,如下示例中index是1(index是从0开始算起):

关于强类型DataSet的一些小建议_12266



现在我们便可通过如下代码来得到返回值:
  1. da.CallSP(xx, xx);
  2. int returnValue = int.Parse(da.GetReturnValue(2).ToString());
复制代码
当然,在ORCAS中,我们也有更好的选择,那就是用LINQ-SQL。它是.NET的一个ORM工具,它可以通过LINQ query自动为你生成SQL脚本,让你更加快速的建立数据访问层,所支持的功能更加的强大。不过在.NET Framework 3.5 SP1中,它将被LINQ-Entity所替代。
原创粉丝点击