IDbDataParameter等,如何使用这些对象请参考我的文章: 《C#实现 IDbConnection / IDbCommand 等相关通用数据接口》 本文将介绍如何通过利用IDbDataAdapter / IDataReader Conn.State==ConnectionState.Open) { Conn.Close(); } } } GetReaderData方法 GetReaderData 方法返回 IDataReader view=netcore-3.1 实现代码如下: public System.Data.IDataReader GetDataReader2(string DbServerType,string strConn
在基于AgileEAS.NET平台的应用开发中,我们推荐第二种方式,但同时一个问题来了,Query方法在执行完SQL语句之后关闭了连接,对于IDataReader这种必须要连接在线的返回类型则第二种方式无法支持 委托查询例子
现在我们来使用委托查询修改上文中IDataReader查询的例子,先贴上原生方式的IDataReader查询:
///
使用ADO.NET 操作需要的步骤 使用ADO.NET操作数据库,先需要一个连接也就是 IDbConnection实例,然后使用IDbCommand执行,通过 IDataReader读取数据。 ExecuteReader ();//在Connect上执行CommandText,并返回一个IDataReader public object ExecuteScalar ();//执行查询,并返回第一行第一列 IDataReader 提供一种读取结果集(通过对数据源执行命令获取)的一个或多个只进流的方法,具体实现由访问关系数据库的.NET 数据提供程序实现。 继承了接口 IDataRecord,也就是说IDataReader也能直接返回当前行的数据。 现在获取一个Reader: IDataReader reader = command.ExecuteReader(); 如果只是想执行SQL,不关心返回内容的话,可以调用以下方法: int lines
} 抽象工厂 Abstract Factory //数据库访问有关的基类 class IDBConnection{ }; class IDBommand{ }; class IDataReader IDBConnection *CreateDBConnection() = 0; virtual IDBommand *CreateDBCommand() = 0; virtual IDataReader public IDBConnection{ } class SqlCommand : public IDBCommand{ } class SqlDataReader : public IDataReader IDBConnection{ } class OracleCommand : public IDBCommand{ } class OracleDataReader : public IDataReader "; command->SetConnection(connection); //关联性 IDataReader* reader = command->ExecuteReader
如果是一个查询命令,则可能返回一个IDataReader对象、一个DataSet对象、一个DataTable对象、一个IDictionary对象、一个IList对象、一个数据对象(在数据对象管理中定义的数据结构 DataReader:返回一个 IDataReader对象。 由于 IDataReader对象数据库的访问是面向连接的,而 Query 方法内部符合前面的IConnection操作模式,因此如果要返回一个 IDataReader,则必须在调用 Query 方法前打开相应的 IConnection,并在对IDataReader操作结束后关闭 IConnection,否则Query方法返回前会关闭 IConnection而导致 IDataReader不可用。 程序员在开发过程中如果需要不处理数据库打开和关闭操作而需要返回IDataReader类型的处理结果,可以使用如下形式的处理: private void button3_Click(object
BlogPostDto>() .ForMember(dto => dto.PostId, opt => opt.MapFrom(entity => entity.ID)); 场景2:IDataReader 映射至实体类 代码: using (IDataReader reader = _db.ExecuteReader(command)) { if (reader.Read()) {
数据库连接成功"); return con; } step4:数据查询并显示 Sql查询语句获取的数据是分格式的,我们还用SqlDataReader来做,然后用IDataReader 这里我们将使用IDataReader语句 //数据库类的实例,类的代码在下方 DB db = new DB(); //解析方法 using (IDataReader read = db.read("select * from userInfo")) {
数据层分页
这种方案一般使用 IDataReader 实现。 查询的 SQL 依然是查询所有的数据,但是在对查询出的 IDataReader 进行遍历读取每一行时,只读取对应页的数据,其它页的数据则忽略。同时,遍历到记录集的最后一行,即可获得数据的总行数。 主要逻辑代码如下:
///
DataReader映射 /// public static IEnumerable<T> DataReaderMapTo<T>(this System.Data.IDataReader reader) { Mapper.Initialize(cfg => cfg.CreateMap<System.Data.IDataReader, IEnumerable <T>>()); return Mapper.Map<System.Data.IDataReader, IEnumerable<T>>(reader); }
我们假设SqlDataReader和 XmlDataReader都实现了IDataReader接口。 我们只需要把代码修改成如下的样子即可解决开始遇到的问题了:
private IList
, int, object>> readerDelegates = DataReaderDelegate(); MyFunc<IDataReader, int, object>[ ] getDataMethods = new MyFunc<IDataReader, int, object>[fcount]; INamedMemberAccessor[] reader.IsDBNull(i)) { MyFunc<IDataReader, int, object> read 返回DataReader类型化数据读取方法委托的DataReaderDelegate方法定义如下: private static Dictionary<Type, MyFunc<IDataReader , int, object>> dictReaderDelegate = null; private static Dictionary<Type, MyFunc<IDataReader, int,
/// <exception cref="Exception"></exception> public List<T> Query<T>(string sql, Func<IDataReader / <exception cref="Exception"></exception> public T QueryFirstOrDefault<T>(string sql, Func<IDataReader /// <returns>SqlDataReader</returns> public T RunProcedure<T>(string storedProcName, Func<IDataReader returns>SqlDataReader</returns> public List<T> RunProcedureToList<T>(string storedProcName, Func<IDataReader name="order">排序</param> public List<T> QueryWithPage<T>(string tablename, PageInfo page, Func<IDataReader
方法族 T SelectFirst<T>(IQuery query) where T : class, new() 方法族 T VisitDataReader<T>(String sql, Func<IDataReader callback) 方法族 T VisitDataReaderBySp<T>(String procName, StatementParameterCollection parameters, Func<IDataReader class, new() 方法族 DataSet ExecDataSetBySp(String procName, StatementParameterCollection parameters)方法族 IDataReader SelectDataReader(String sql) 方法族 IDataReader ExecDataReaderBySp(String procName, StatementParameterCollection
/// /// <param name="cmdText">执行的命令文本</param> /// <returns>IDataReader对象</ /param> /// <param name="commandParameters">IDataParameter参数列表</param> /// <returns>IDataReader 对象</returns> IDataReader ExecuteReader(CommandType cmdType, string cmdText, params IDataParameter /// /// <param name="cmdText">执行的命令文本</param> /// <returns>IDataReader对象</ returns> public IDataReader ExecuteReader(string cmdText) { return ExecuteReader
BookPlaceListInfo> list = new List<BookPlaceListInfo>(); Database db = DatabaseFactory.CreateDatabase(); using (IDataReader db.AddInParameter(dbCommand, "bookPlaceID", DbType.AnsiString, bookPlaceID); BookPlaceListInfo model = null; using (IDataReader /// <param name="dataReader"></param> /// <returns></returns> private BookPlaceListInfo ReaderBind(IDataReader
Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。 支持多种数据库。 通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。 支持FrameWork2.0,3.0,3.5,4.0,4.5 3.使用Dapper.Net并演示 1.
string getNewsFiles(string NewsID, int NewsTF) { string str = “”; IDataReader string getNewsFiles(string NewsID, int NewsTF) { string str = “”; IDataReader
query.EndTime)); 172 string connStr = SqlConnectionHelper.GetConnection(); 173 using (IDataReader TIndex"; 208 string connStr = SqlConnectionHelper.GetConnection(); 209 using (IDataReader count); 242 string connStr = SqlConnectionHelper.GetConnection(); 243 using (IDataReader ; 306 307 string connStr = SqlConnectionHelper.GetConnection(); 308 using (IDataReader
Dapper的速度接近与IDataReader。 Dapper支持主流数据库 Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库 支持多表并联的对象。 原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象 Dapper语法十分简单。
}
}
#endregion
///