diff --git a/ACUtils.SqlDb.Utils/DBModel.cs b/ACUtils.SqlDb.Utils/DBModel.cs index 8507fe5..9a55a61 100644 --- a/ACUtils.SqlDb.Utils/DBModel.cs +++ b/ACUtils.SqlDb.Utils/DBModel.cs @@ -55,10 +55,7 @@ public static IEnumerable Idrate(IDataReader reader) { while (reader.Read()) { - foreach (var o in _returnIdrate(reader)) - { - yield return o; - } + yield return _returnIdrate(reader); } } @@ -66,21 +63,15 @@ public async static IAsyncEnumerable IdrateAsync(SqlDataReader reader) { while (await reader.ReadAsync()) { - foreach (var o in _returnIdrate(reader)) - { - yield return o; - } + yield return _returnIdrate(reader); } } - private static IEnumerable _returnIdrate(IDataReader reader) + private static T _returnIdrate(IDataReader reader) { - for (int i = 0; i < reader.FieldCount; i++) - { - var obj = new T(); - obj.idrate(reader); - yield return obj; - } + var obj = new T(); + obj.idrate(reader); + return obj; } diff --git a/ACUtils.SqlDb/SqlDb_QueryMany.cs b/ACUtils.SqlDb/SqlDb_QueryMany.cs index f3d73a0..cb86cb2 100644 --- a/ACUtils.SqlDb/SqlDb_QueryMany.cs +++ b/ACUtils.SqlDb/SqlDb_QueryMany.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Data; using System.Data.SqlClient; +using System.Threading.Tasks; namespace ACUtils { @@ -17,13 +18,13 @@ public static class SqlDb_QueryMany #region static with simple params public static List QueryMany(SqlConnection connection, string queryString, params KeyValuePair[] queryParams) where T : ACUtils.DBModel, new() { - return _return(SqlDb_QueryDataTable.QueryDataTable(connection, queryString, queryParams)); + return _return(SqlDb_QueryManyAsync.QueryManyAsync(connection, queryString, queryParams)).Result; } #endregion #region static with typed params public static List QueryMany(SqlConnection connection, string queryString, params KeyValuePair>[] queryParams) where T : ACUtils.DBModel, new() { - return _return(SqlDb_QueryDataTable.QueryDataTable(connection: connection, queryString: queryString, queryParams: queryParams)); + return _return(SqlDb_QueryManyAsync.QueryManyAsync(connection: connection, queryString: queryString, queryParams: queryParams)).Result; } #endregion @@ -36,19 +37,25 @@ public static class SqlDb_QueryMany #region with simple params public static List QueryMany(this SqlDb self, string queryString, params KeyValuePair[] queryParams) where T : ACUtils.DBModel, new() { - return _return(self.QueryDataTable(queryString: queryString, queryParams: queryParams)); + return _return(SqlDb_QueryManyAsync.QueryManyAsync(self, queryString: queryString, queryParams: queryParams)).Result; } #endregion #region whit typed params public static List QueryMany(this SqlDb self, string queryString, params KeyValuePair>[] queryParams) where T : ACUtils.DBModel, new() { - return _return(self.QueryDataTable(queryString: queryString, queryParams: queryParams)); + return _return(SqlDb_QueryManyAsync.QueryManyAsync(self, queryString: queryString, queryParams: queryParams)).Result; } #endregion - private static List _return(DataTable dt) where T : ACUtils.DBModel, new() + private static async Task> _return(IAsyncEnumerable asyncReturn) where T : ACUtils.DBModel, new() { - return ACUtils.DBModel.Idrate(dt); + + var list = new List(); + await foreach(var el in asyncReturn) + { + list.Add(el); + } + return list; } } } diff --git a/Tests/FileUtilsTests.cs b/Tests/FileUtilsTests.cs index aae5aa2..5c04fdb 100644 --- a/Tests/FileUtilsTests.cs +++ b/Tests/FileUtilsTests.cs @@ -241,7 +241,6 @@ private bool _hasSomePermissions(string filePath, string accountName) } [Test] - [TestCase(@"ANDREA-C-2021-1\test")] [TestCase(@"NT AUTHORITY\NETWORK")] [Parallelizable(ParallelScope.All)] public void FixAclTest(string identityUPN) diff --git a/Tests/SqlDbTest.cs b/Tests/SqlDbTest.cs index 4f41f38..b28a15f 100644 --- a/Tests/SqlDbTest.cs +++ b/Tests/SqlDbTest.cs @@ -14,7 +14,7 @@ class SqlDbTest { private TransactionScope scope; private SqlDb db; - private string CONNECTION_STRING => System.Environment.GetEnvironmentVariable("ACUTILS_TEST_CONNECTION_STRING") ?? "Data Source=(local);Initial Catalog=master;Integrated Security=SSPI;"; + private string CONNECTION_STRING => System.Environment.GetEnvironmentVariable("ACUTILS_TEST_CONNECTION_STRING") ?? "Data Source=(local);Initial Catalog=AdventureWorks2019;Integrated Security=SSPI;"; [SetUp] public void Setup() @@ -155,5 +155,25 @@ public void TestQueryDictionary() Assert.AreEqual(result[8722], "Sara Blue"); } + + class DbPerson: ACUtils.DBModel + { + public int BusinessEntityID { get; set; } + public string PersonType { get; set; } + public string Title { get; set; } + public string FirstName { get; set; } + public string MiddleName { get; set; } + public string LastName { get; set; } + } + + + [Test] + public void TestQueryMany() + { + var count = db.QuerySingleValue("SELECT COUNT(*) FROM Person.Person"); + var allPersons = db.QueryMany("SELECT * FROM Person.Person"); + Assert.AreEqual(count, allPersons.ToList().Count); + } + } }