当前位置: 首页 > 编程语言 > C#

使用SqlDataReader作为资源的习语分享

时间:2023-04-10 14:42:07 C#

SqlDataReader作为资源的习语跟着这个问题,我发现自己一遍又一遍地写着下面的代码:SqlCommandcommand=newSqlCommand();//使用我们想要执行的操作来初始化命令的代码using(SqlConnectionconnection=openConnection()){command.Connection=connection;using(SqlDataReaderdataReader=thisCommand.ExecuteReader()){while(dataReader.Read()){//Dostuffwithresults}}}必须嵌套两个using语句非常乏味。有没有办法告诉SqlDataReader它拥有命令,并告诉命令它拥有连接?如果有办法做到这一点,那么我可以编写一个可以像这样调用的辅助方法://buildAndExecuteCommand打开连接,使用连接初始化命令//并返回SqlDataReader对象。处理//SqlDataReader以处理使用(SqlDataReaderreader=buildAndExecuteCommand(...))获取的所有资源{//Dostuffwithreader}还是我必须咬紧牙关并围绕SqlDataReader编写自己的包装器?要做的一件事是编写一个方法来为您处理这个问题,用每个结果回调一个委托。例如:使用(SqlConnectionconnection=openConnection()){command.Connection=connection;ExecuteReaderWithCommand(command,reader=>{//在这里处理结果。});}然后ExecuteReaderWithCommand会是这样的:如果你愿意,你可以使它成为一个扩展方法。哎呀,如果你愿意,你可以去城里让它为你打开连接……你越能抽象出“打开/使用/关闭”的想法就越好。您可以这样写,并告诉dataReader在使用后关闭连接:SqlCommandcommand=newSqlCommand();命令.Connection=openConnection();using(SqlDataReaderdataReader=command.ExecuteReader(CommandBehavior.CloseConnection)){while(dataReader.Read()){//Dostuffwithresults}}但是,最好显式关闭连接,因为连接之间可能会发生异常打开和ExecuteReader。您必须自己构建包装器。或者您可以使用ORM,如果可以的话。为什么不看看企业图书馆DAAB?以下是文档中的代码示例,已针对您的场景进行了调整:Databasedb=DatabaseFactory.CreateDatabase();使用(IDataReaderreader=db.ExecuteReader(CommandType.Text,"SQLhere...")){while(reader.Read()){action(reader);使用委托(例如Action)当然是一种选择,但我使用的是.NET1.0中的一组类似的重载。调用者使用using块来处理返回的读取器,读取器反过来处理连接。以上就是C#学习教程的全部内容:使用SqlDataReader作为资源的地道用法来分享。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——publicIDataReaderExecuteReader(stringcommandText,CommandTypecommandType,IDbDataParameter[]parameters){IDbConnectionconnection=CreateConnection();尝试{IDbCommandcommand=CreateCommand(commandText,connection);命令.CommandType=命令类型;AppendParameters(命令,参数);connection.Open();返回command.ExecuteReader(CommandBehavior.CloseConnection);}catch{connection.Close();扔;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢