我正在使用SqlDataReader来填充Winform应用程序中的实体。实体类在数据库中有几个外键属性,我想将它们设置为实体类中的属性。每个属性都是“属性”类型,带有ID&描述属性。
系统的某些用户远离数据库,因此数据访问性能是一个重要的考虑因素。
我可以针对返回单个结果集的存储过程多次执行SqlCommand.ExecuteReader(每个属性一次),或者我可以针对返回多个结果集的存储过程执行一次SqlCommand.ExecuteReader并使用SqlDataReader.NextResult移动它们并设置属性。
如果我使用.NextResult循环,我会遇到一些问题,确保存储的proc和属性赋值循环是对齐的。如果proc中的SELECT语句的顺序改变了顺序,那么winform应用程序中的赋值顺序就会搞砸了。
如果SqlDataReader仍然为每次读取返回数据库,是否有很多时间添加执行SqlCommand.ExecuteReader?为每个属性执行一个ExecuteReader会使赋值方更清楚。
谢谢!
答案 0 :(得分:1)
使用.Nextresult,ADO.Net不会返回每个结果集的数据库。所有这些逻辑都在ADO.Net数据提供程序中,在那里运行(在您的数据访问层中,可能在您的应用程序服务器上,或在您的UI层中),
但是,如果多次执行datareader,则每次调用都会对数据库进行一次rtound。因此,如果执行此代码的层距离DB有一定距离(往返时间),那么最好使用.NextResult技术。
您还应该考虑使用DataSet(使用多个DataTables)而不是数据读取器......您可能会发现这种性能更高。