ExecuteDataReader和ExecuteResultSet之间的实现差异

时间:2014-01-10 09:12:42

标签: c# sql ado.net sql-server-ce

我有一系列用于数据访问的辅助类,我尝试确保它们在所有主要提供程序(如SQL Server,Oracle和现在的SQL CE)中尽可能保持一致。

然而,有一件事我注意到,如果我在ExecuteReader上拨打SqlCeCommand而不是SqlCommand,我就不会回复DataReader我可以使用HasRows()

进行测试

查看文档时,为了得到DataReader我可以用这种方式进行测试,我应该使用ExecuteResultSet ResultSetOptions参数设置为ResultSetOptions.Scrollable }。这里的问题是没有重载需要CommandBehaviour作为参数,这是我通常做的,以确保当我处理我的DAL类中的DataReader连接时,连接将被关闭。

这里推荐的最佳做法是什么?我是否应该将ExecuteResultSet构造中的using包裹起来,以便在使用它完成DAL代码时自动处理它?是否有一些我缺少的替代方案?

2 个答案:

答案 0 :(得分:0)

你应该只使用rdr.Read(),将对所有提供者起作用。

答案 1 :(得分:0)

您可以使用Read()方法查找行或列中的数据

Dim dd As SqlCeDataReader = sqlCommand.ExecuteReader
Dim HasRows As Boolean = dd.Read()
If HasRows Then
    ' Datareader has rows

Else
    ' No data in Row or Column
End If