From 20287a6b8bf9636a2228e6f1b63914ef2898fec4 Mon Sep 17 00:00:00 2001 From: "grzegorz.russek" Date: Wed, 22 Feb 2023 13:42:54 +0000 Subject: [PATCH] Made previous change working correctly --- AmalgamationTool/DynamORM.Amalgamation.cs | 9 +++++++-- DynamORM/DynamicProcedureInvoker.cs | 5 +++++ DynamORM/Helpers/DataReaderExtensions.cs | 4 ++-- Tester/Program.cs | 6 ++++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/AmalgamationTool/DynamORM.Amalgamation.cs b/AmalgamationTool/DynamORM.Amalgamation.cs index b4d33f3..f8b1432 100644 --- a/AmalgamationTool/DynamORM.Amalgamation.cs +++ b/AmalgamationTool/DynamORM.Amalgamation.cs @@ -5581,6 +5581,11 @@ namespace DynamORM using (IDataReader rdr = cmd.ExecuteReader()) mainResult = rdr.CachedReader(); } + else if (types[0] == typeof(DataTable)) + { + using (IDataReader rdr = cmd.ExecuteReader()) + mainResult = rdr.CachedReader().ToDataTable(binder.Name); + } else if (types[0].IsGenericEnumerable()) { Type argType = types[0].GetGenericArguments().First(); @@ -10990,7 +10995,7 @@ namespace DynamORM /// The name to give the table. If tableName is null or an empty string, a default name is given when added to the System.Data.DataTableCollection. /// The namespace for the XML representation of the data stored in the DataTable. /// - public static DataTable GetDataTableFromDataReader(this IDataReader r, string name = null, string nameSpace = null) + public static DataTable ToDataTable(this IDataReader r, string name = null, string nameSpace = null) { DataTable schemaTable = r.GetSchemaTable(); DataTable resultTable = new DataTable(name, nameSpace); @@ -11011,7 +11016,7 @@ namespace DynamORM while (r.Read()) { DataRow row = resultTable.NewRow(); - for (int i = 0; i < resultTable.Columns.Count - 1; i++) + for (int i = 0; i < resultTable.Columns.Count; i++) row[i] = r[i]; resultTable.Rows.Add(row); diff --git a/DynamORM/DynamicProcedureInvoker.cs b/DynamORM/DynamicProcedureInvoker.cs index 379f8f7..bd0846e 100644 --- a/DynamORM/DynamicProcedureInvoker.cs +++ b/DynamORM/DynamicProcedureInvoker.cs @@ -192,6 +192,11 @@ namespace DynamORM using (IDataReader rdr = cmd.ExecuteReader()) mainResult = rdr.CachedReader(); } + else if (types[0] == typeof(DataTable)) + { + using (IDataReader rdr = cmd.ExecuteReader()) + mainResult = rdr.CachedReader().ToDataTable(binder.Name); + } else if (types[0].IsGenericEnumerable()) { Type argType = types[0].GetGenericArguments().First(); diff --git a/DynamORM/Helpers/DataReaderExtensions.cs b/DynamORM/Helpers/DataReaderExtensions.cs index dd8bd95..c5ca65d 100644 --- a/DynamORM/Helpers/DataReaderExtensions.cs +++ b/DynamORM/Helpers/DataReaderExtensions.cs @@ -11,7 +11,7 @@ namespace DynamORM.Helpers /// The name to give the table. If tableName is null or an empty string, a default name is given when added to the System.Data.DataTableCollection. /// The namespace for the XML representation of the data stored in the DataTable. /// - public static DataTable GetDataTableFromDataReader(this IDataReader r, string name = null, string nameSpace = null) + public static DataTable ToDataTable(this IDataReader r, string name = null, string nameSpace = null) { DataTable schemaTable = r.GetSchemaTable(); DataTable resultTable = new DataTable(name, nameSpace); @@ -32,7 +32,7 @@ namespace DynamORM.Helpers while (r.Read()) { DataRow row = resultTable.NewRow(); - for (int i = 0; i < resultTable.Columns.Count - 1; i++) + for (int i = 0; i < resultTable.Columns.Count; i++) row[i] = r[i]; resultTable.Rows.Add(row); diff --git a/Tester/Program.cs b/Tester/Program.cs index 2e703eb..f088ff5 100644 --- a/Tester/Program.cs +++ b/Tester/Program.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Data; using System.Linq; using DynamORM; +using DynamORM.Helpers; namespace Tester { @@ -48,6 +50,10 @@ namespace Tester //db.Execute("DROP TABLE Experiments "); + IDataReader rdr = db.Procedures.sp_getdate(); + var dt = rdr.ToDataTable(); + var dt2 = db.Procedures.sp_getdate(); + db.Procedures.usp_API_Generate_Doc_Number(key: Guid.NewGuid(), mdn_id: "ZZ"); var resL = (db.Procedures.GetProductDesc>() as IEnumerable)