我觉得 DataTable 很不好用,头都晕死了

时间:2021-08-18 15:52:44
在数据访问层中从数据库中取得的数据,经过逻辑层处理之后,返回到界面层,在经过这一系列的变换处理之后,无论是逻辑处理还是界面取数据显示,程序员都要知道他得到的 DataTable 或 DataSet, DataView 等等的表结构信息,比如程序员必须知道将要处理或显示的数据所在的列号,或列的名字等,为此程序员可能要到一步一步的跟踪到数据来源的代码中去。如果系统大了,又有了相似的功能和界面,这种数据很容易搞得乱七八糟,我已经几次被这种情况搞得晕头转向了。

各位有什么好的经验吗?

25 个解决方案

#1


ding

#2


在逻辑处理的时候转成class就可以了

#3


将你需要用的每个数据表查询结构转换为一个类(Class),每个字段转化为她的一个Property,这样你就不会头晕了,查询完之后将结果转化为类

#4


可以写:DataTable.writexml(@"C:\temp.xml");查看。

#5


学习

#6


学习中

#7


复杂的应用需要在物理数据和逻辑数据层直接进行映射,比如ORM映射,这样使得逻辑处理的数据和物理存储的表现形式无关。

也可以这样,.net中的数据集,提供了强类型schema机制,使用强类型和使用一般的Class一样,你用强类型就解决要记住数据库表字段的问题了。

#8


make

#9


make

#10


make

#11


我们一般作一个项目,在一个解决方案里基本要包含3个项目,一个是主项目,一个是DAO项目(表结构项目),还有一个就是规则项目(包含处理DAO的方法),也可以在建一个公共类项目,把一些通用方法放在里面

#12


对于后面数据结构不需要知道的人是:用户。

你这些(或列的名字等)都不想知道,那等10年后再做程序吧,估计可能就行了。
那时候可能真的不叫“写”程序,而是“做”程序了。

#13


To wwfy(我舞飞扬):

但是在 java 中,逻辑层和界面层的程序员就不需要知道数据库中的字段信息。在好的 java 开发模式中,数据库中的实体表中的一行就是一个对象,这个对象有很多 getXXX()、setXXX() 方法,业务规则要做的就是对这些对象进行操作。JAVA 中的 EJB 的一个很大的目的就是实现数据层和逻辑、界面层的分离,现在 java 中流行得比较火的 Hibernate 就是专门用于实现业务规则和数据库具体操作的分离。


我觉得这样做相对于 ADO.net 起码有两个好处。比如说有的人对“用户名”这个属性用 "username",而有的人就用"name"或"user"。 用 getXXX 或设置属性的方法可以通过开发工具的上下文提示完成代码,从而不需要记住那么多的容易混淆的属性和字段名字;另外可以把错误检查放在编译时进行,属性的方法写错了编译就通不过,如果是在 ADO.net 中,象DataTable.Rows[i]["UserName"] 和 DataTable.Rows[i]["User"] 都编译通得过,要等到测试运行之后出了异常才知道写错了。

程序员面向的是对象,这才叫面向对象编程

#14


To francsescoli(我爱世界杯) 

你说的是类型化的 DataSet 吗?

#15


我喜欢得到一个实现 IList , ICollection , IEnumerable 接口的类

#16


up

#17


我觉得做项目时先要作一个图(项目结构图)规划数据的进、出、转、存合并等方法和操作的表。不然写程序很乱,经常修改数据库、表和类的方法。

#18


看下petshop就明白了.

#19


mark

#20


用强类型的DATASET可以避免你说的错误检查的问题

#21


xiahouwen(武眉博<活靶子.NET>) ( ) 信誉:105  2006-07-04 15:55:00  得分: 0  
 
 
   我喜欢得到一个实现 IList , ICollection , IEnumerable 接口的类
  
 

#22


很好用,lz用法有问题

#23


绑定

#24


sweet12345(幸福的狗狗) 的方法就可以,也就是自己实现一下java里Hibernate的部分功能。

#25


class

#1


ding

#2


在逻辑处理的时候转成class就可以了

#3


将你需要用的每个数据表查询结构转换为一个类(Class),每个字段转化为她的一个Property,这样你就不会头晕了,查询完之后将结果转化为类

#4


可以写:DataTable.writexml(@"C:\temp.xml");查看。

#5


学习

#6


学习中

#7


复杂的应用需要在物理数据和逻辑数据层直接进行映射,比如ORM映射,这样使得逻辑处理的数据和物理存储的表现形式无关。

也可以这样,.net中的数据集,提供了强类型schema机制,使用强类型和使用一般的Class一样,你用强类型就解决要记住数据库表字段的问题了。

#8


make

#9


make

#10


make

#11


我们一般作一个项目,在一个解决方案里基本要包含3个项目,一个是主项目,一个是DAO项目(表结构项目),还有一个就是规则项目(包含处理DAO的方法),也可以在建一个公共类项目,把一些通用方法放在里面

#12


对于后面数据结构不需要知道的人是:用户。

你这些(或列的名字等)都不想知道,那等10年后再做程序吧,估计可能就行了。
那时候可能真的不叫“写”程序,而是“做”程序了。

#13


To wwfy(我舞飞扬):

但是在 java 中,逻辑层和界面层的程序员就不需要知道数据库中的字段信息。在好的 java 开发模式中,数据库中的实体表中的一行就是一个对象,这个对象有很多 getXXX()、setXXX() 方法,业务规则要做的就是对这些对象进行操作。JAVA 中的 EJB 的一个很大的目的就是实现数据层和逻辑、界面层的分离,现在 java 中流行得比较火的 Hibernate 就是专门用于实现业务规则和数据库具体操作的分离。


我觉得这样做相对于 ADO.net 起码有两个好处。比如说有的人对“用户名”这个属性用 "username",而有的人就用"name"或"user"。 用 getXXX 或设置属性的方法可以通过开发工具的上下文提示完成代码,从而不需要记住那么多的容易混淆的属性和字段名字;另外可以把错误检查放在编译时进行,属性的方法写错了编译就通不过,如果是在 ADO.net 中,象DataTable.Rows[i]["UserName"] 和 DataTable.Rows[i]["User"] 都编译通得过,要等到测试运行之后出了异常才知道写错了。

程序员面向的是对象,这才叫面向对象编程

#14


To francsescoli(我爱世界杯) 

你说的是类型化的 DataSet 吗?

#15


我喜欢得到一个实现 IList , ICollection , IEnumerable 接口的类

#16


up

#17


我觉得做项目时先要作一个图(项目结构图)规划数据的进、出、转、存合并等方法和操作的表。不然写程序很乱,经常修改数据库、表和类的方法。

#18


看下petshop就明白了.

#19


mark

#20


用强类型的DATASET可以避免你说的错误检查的问题

#21


xiahouwen(武眉博<活靶子.NET>) ( ) 信誉:105  2006-07-04 15:55:00  得分: 0  
 
 
   我喜欢得到一个实现 IList , ICollection , IEnumerable 接口的类
  
 

#22


很好用,lz用法有问题

#23


绑定

#24


sweet12345(幸福的狗狗) 的方法就可以,也就是自己实现一下java里Hibernate的部分功能。

#25


class