Nic*_*ice 10 c# sqldatareader idatareader
有人能告诉我这两段代码之间的区别吗?为什么要使用IDataReader?
using (IDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// get data from the reader
}
}
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// get data from the reader
}
}
Run Code Online (Sandbox Code Playgroud)
C.E*_*uis 17
SqlDataReader实现接口IDataReader.所有其他ADO.NET驱动程序(Oracle,MySql等)也是如此.您可以使用IDataReader,这样如果您计划某天更改数据库引擎,则不必重写所有SqlDataReader引用.
同样适用于IDbConnection,IDbCommand等等.当然,在创建连接时,您需要指定您正在使用的引擎,但除此之外,您将永远不必明确定义您正在使用的数据库引擎.
请注意,IDataReader没有该HasRows属性,您必须使用这些Create...()方法来创建命令和参数:
IDbCommand command = myDbConnection.CreateCommand();
Run Code Online (Sandbox Code Playgroud)
代替:
SqlCommand command = new SqlCommand(myDbConnection);
Run Code Online (Sandbox Code Playgroud)
编辑:您可能希望使用DbConnection所有ADO.NET提供程序继承的抽象类,而不是使用接口.它们提供了一些额外的功能,例如获取架构信息,以及上述HasRows属性DbDataReader.请参阅http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/759fa77b-8269-4c4a-be90-3c2bdce61d92/,了解接口未跟上抽象类的原因.
| 归档时间: |
|
| 查看次数: |
6332 次 |
| 最近记录: |