From f9f1b6f34f83368ffe9dc87fce1a7cf20cc8667d Mon Sep 17 00:00:00 2001 From: "a.bozhenov" Date: Fri, 11 Oct 2019 15:04:13 +0300 Subject: [PATCH] upd --- ZeroLevel.SQL/Contracts/IDbProvider.cs | 1 + ZeroLevel.SQL/SqlDbProvider.cs | 38 ++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/ZeroLevel.SQL/Contracts/IDbProvider.cs b/ZeroLevel.SQL/Contracts/IDbProvider.cs index 3064569..420786c 100644 --- a/ZeroLevel.SQL/Contracts/IDbProvider.cs +++ b/ZeroLevel.SQL/Contracts/IDbProvider.cs @@ -20,6 +20,7 @@ namespace ZeroLevel.SqlServer DbReader ExecuteReader(string query, DbParameter[] par); void LazySelect(string query, DbParameter[] par, Func readHandler); void LazySelect(string query, DbParameter[] par, Func readHandler, int timeout); + void LazySelectWithParameters(string query, IEnumerable> par, Func readHandler, int timeout); T Read(DbDataReader reader, int index); T Read(DbDataReader reader, string name); diff --git a/ZeroLevel.SQL/SqlDbProvider.cs b/ZeroLevel.SQL/SqlDbProvider.cs index fbd3b75..3d4541a 100644 --- a/ZeroLevel.SQL/SqlDbProvider.cs +++ b/ZeroLevel.SQL/SqlDbProvider.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.SqlClient; +using System.Linq; namespace ZeroLevel.SqlServer { @@ -282,6 +283,43 @@ namespace ZeroLevel.SqlServer } } } + + public void LazySelectWithParameters(string query, IEnumerable> par, Func readHandler, int timeout = Timeout) + { + using (var connection = _factory.CreateConnection()) + { + using (var cmd = CreateCommand(connection, query, null, Timeout)) + { + if (par != null && par.Any()) + { + foreach (var p in par) + { + cmd.Parameters.AddWithValue(p.Key, p.Value); + } + } + using (SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection)) + { + try + { + while (reader.Read()) + { + if (false == readHandler(reader)) + break; + } + } + catch (Exception ex) + { + Log.Error(ex, "Error executing query {0}.", cmd.CommandText); + } + finally + { + // Always call Close when done reading. + reader.Close(); + } + } + } + } + } #endregion #region ExistsTable