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


强类型的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类,然后加上这个自定义的方法:

  Code

partial class UsersTableAdapter
{
   public object GetReturnValue(int commandIndex)
   {
     return this.CommandCollection[commandIndex].Parameters[0].Value;
   }
}

  这个commandIndex的值就是你的方法所在的index,如下示例中index是1(index是从0开始算起):

  现在我们便可通过如下代码来得到返回值:

  Code

da.CallSP(xx, xx);
int returnValue = int.Parse(da.GetReturnValue(2).ToString());

  当然,在ORCAS中,我们也有更好的选择,那就是用LINQ-SQL。它是.NET的一个ORM工具,它可以通过LINQ query自动为你生成SQL脚本,让你更加快速的建立数据访问层,所支持的功能更加的强大。不过在.NET Framework 3.5 SP1中,它将被LINQ-Entity所替代。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3