From e4e50f76ef2beef8ac0d41c2f3a1c5eade47c558 Mon Sep 17 00:00:00 2001 From: "grzegorz.russek" Date: Tue, 5 May 2015 21:04:34 +0000 Subject: [PATCH] Move not table specific methods into database, but leave old declarations for compatibility (move to extension in the future) --- AmalgamationTool/DynamORM.Amalgamation.cs | 403 ++++++++++++++-------- DynamORM/DynamicConnection.cs | 2 +- DynamORM/DynamicDatabase.cs | 242 +++++++++++++ DynamORM/DynamicTable.cs | 162 +-------- 4 files changed, 511 insertions(+), 298 deletions(-) diff --git a/AmalgamationTool/DynamORM.Amalgamation.cs b/AmalgamationTool/DynamORM.Amalgamation.cs index dccfcbe..e3d0fe6 100644 --- a/AmalgamationTool/DynamORM.Amalgamation.cs +++ b/AmalgamationTool/DynamORM.Amalgamation.cs @@ -902,7 +902,7 @@ namespace DynamORM /// to be used after a connection is opened. public string Database { - get { throw new NotImplementedException(); } + get { return Connection.Database; } } /// Gets the current state of the connection. @@ -1767,6 +1767,247 @@ namespace DynamORM #endregion From/Insert/Update/Delete + #region Procedure + + /// Execute stored procedure. + /// Name of stored procedure to execute. + /// Number of affected rows. + public virtual int Procedure(string procName) + { + return Procedure(procName, (DynamicExpando)null); + } + + /// Execute stored procedure. + /// Name of stored procedure to execute. + /// Arguments (parameters) in form of expando object. + /// Number of affected rows. + public virtual int Procedure(string procName, params object[] args) + { + if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) + throw new InvalidOperationException("Database connection desn't support stored procedures."); + + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(CommandType.StoredProcedure, procName) + .AddParameters(this, args) + .ExecuteNonQuery(); + } + } + + /// Execute stored procedure. + /// Name of stored procedure to execute. + /// Arguments (parameters) in form of expando object. + /// Number of affected rows. + public virtual int Procedure(string procName, DynamicExpando args) + { + if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) + throw new InvalidOperationException("Database connection desn't support stored procedures."); + + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(CommandType.StoredProcedure, procName) + .AddParameters(this, args) + .ExecuteNonQuery(); + } + } + + /// Execute stored procedure. + /// Name of stored procedure to execute. + /// Arguments (parameters) in form of expando object. + /// Number of affected rows. + public virtual int Procedure(string procName, ExpandoObject args) + { + if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) + throw new InvalidOperationException("Database connection desn't support stored procedures."); + + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(CommandType.StoredProcedure, procName) + .AddParameters(this, args) + .ExecuteNonQuery(); + } + } + + #endregion Procedure + + #region Execute + + /// Execute non query. + /// SQL query containing numbered parameters in format provided by + /// methods. Also names should be formatted with + /// method. + /// Arguments (parameters). + /// Number of affected rows. + public virtual int Execute(string sql, params object[] args) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(sql).AddParameters(this, args) + .ExecuteNonQuery(); + } + } + + /// Execute non query. + /// Command builder. + /// Number of affected rows. + public virtual int Execute(IDynamicQueryBuilder builder) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(builder) + .ExecuteNonQuery(); + } + } + + /// Execute non query. + /// Command builders. + /// Number of affected rows. + public virtual int Execute(IDynamicQueryBuilder[] builders) + { + int ret = 0; + + using (var con = Open()) + { + using (var trans = con.BeginTransaction()) + { + foreach (var builder in builders) + { + using (var cmd = con.CreateCommand()) + { + ret += cmd + .SetCommand(builder) + .ExecuteNonQuery(); + } + } + + trans.Commit(); + } + } + + return ret; + } + + #endregion Execute + + #region Scalar + + /// Returns a single result. + /// SQL query containing numbered parameters in format provided by + /// methods. Also names should be formatted with + /// method. + /// Arguments (parameters). + /// Result of a query. + public virtual object Scalar(string sql, params object[] args) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(sql).AddParameters(this, args) + .ExecuteScalar(); + } + } + + /// Returns a single result. + /// Command builder. + /// Result of a query. + public virtual object Scalar(IDynamicQueryBuilder builder) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(builder) + .ExecuteScalar(); + } + } + + #endregion Scalar + + #region Query + + /// Enumerate the reader and yield the result. + /// SQL query containing numbered parameters in format provided by + /// methods. Also names should be formatted with + /// method. + /// Arguments (parameters). + /// Enumerator of objects expanded from query. + public virtual IEnumerable Query(string sql, params object[] args) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + using (var rdr = cmd + .SetCommand(sql) + .AddParameters(this, args) + .ExecuteReader()) + while (rdr.Read()) + { + dynamic val = null; + + // Work around to avoid yield being in try...catch block: + // http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch + try + { + val = rdr.RowToDynamic(); + } + catch (ArgumentException argex) + { + var sb = new StringBuilder(); + cmd.Dump(sb); + + throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb), + argex.InnerException.NullOr(a => a, argex)); + } + + yield return val; + } + } + + /// Enumerate the reader and yield the result. + /// Command builder. + /// Enumerator of objects expanded from query. + public virtual IEnumerable Query(IDynamicQueryBuilder builder) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + using (var rdr = cmd + .SetCommand(builder) + .ExecuteReader()) + while (rdr.Read()) + { + dynamic val = null; + + // Work around to avoid yield being in try...catch block: + // http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch + try + { + val = rdr.RowToDynamic(); + } + catch (ArgumentException argex) + { + var sb = new StringBuilder(); + cmd.Dump(sb); + + throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb), + argex.InnerException.NullOr(a => a, argex)); + } + + yield return val; + } + } + + #endregion Query + #region Schema /// Builds query cache if necessary and returns it. @@ -4480,33 +4721,7 @@ namespace DynamORM /// Enumerator of objects expanded from query. public virtual IEnumerable Query(string sql, params object[] args) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - using (var rdr = cmd - .SetCommand(sql) - .AddParameters(Database, args) - .ExecuteReader()) - while (rdr.Read()) - { - dynamic val = null; - - // Work around to avoid yield being in try...catch block: - // http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch - try - { - val = rdr.RowToDynamic(); - } - catch (ArgumentException argex) - { - var sb = new StringBuilder(); - cmd.Dump(sb); - - throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb), - argex.InnerException.NullOr(a => a, argex)); - } - - yield return val; - } + return Database.Query(sql, args); } /// Enumerate the reader and yield the result. @@ -4514,32 +4729,7 @@ namespace DynamORM /// Enumerator of objects expanded from query. public virtual IEnumerable Query(IDynamicQueryBuilder builder) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - using (var rdr = cmd - .SetCommand(builder) - .ExecuteReader()) - while (rdr.Read()) - { - dynamic val = null; - - // Work around to avoid yield being in try...catch block: - // http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch - try - { - val = rdr.RowToDynamic(); - } - catch (ArgumentException argex) - { - var sb = new StringBuilder(); - cmd.Dump(sb); - - throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb), - argex.InnerException.NullOr(a => a, argex)); - } - - yield return val; - } + return Database.Query(builder); } /// Create new . @@ -4563,13 +4753,7 @@ namespace DynamORM /// Result of a query. public virtual object Scalar(string sql, params object[] args) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(sql).AddParameters(Database, args) - .ExecuteScalar(); - } + return Database.Scalar(sql, args); } /// Returns a single result. @@ -4577,13 +4761,7 @@ namespace DynamORM /// Result of a query. public virtual object Scalar(IDynamicQueryBuilder builder) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(builder) - .ExecuteScalar(); - } + return Database.Scalar(builder); } /// Execute stored procedure. @@ -4591,16 +4769,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Procedure(string procName) { - if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) - throw new InvalidOperationException("Database connection desn't support stored procedures."); - - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(CommandType.StoredProcedure, procName) - .ExecuteNonQuery(); - } + return Database.Procedure(procName); } /// Execute stored procedure. @@ -4609,17 +4778,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Procedure(string procName, params object[] args) { - if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) - throw new InvalidOperationException("Database connection desn't support stored procedures."); - - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(CommandType.StoredProcedure, procName) - .AddParameters(Database, args) - .ExecuteNonQuery(); - } + return Database.Procedure(procName, args); } /// Execute stored procedure. @@ -4628,17 +4787,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Procedure(string procName, DynamicExpando args) { - if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) - throw new InvalidOperationException("Database connection desn't support stored procedures."); - - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(CommandType.StoredProcedure, procName) - .AddParameters(Database, args) - .ExecuteNonQuery(); - } + return Database.Procedure(procName, args); } /// Execute stored procedure. @@ -4647,17 +4796,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Procedure(string procName, ExpandoObject args) { - if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) - throw new InvalidOperationException("Database connection desn't support stored procedures."); - - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(CommandType.StoredProcedure, procName) - .AddParameters(Database, args) - .ExecuteNonQuery(); - } + return Database.Procedure(procName, args); } /// Execute non query. @@ -4668,13 +4807,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Execute(string sql, params object[] args) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(sql).AddParameters(Database, args) - .ExecuteNonQuery(); - } + return Database.Execute(sql, args); } /// Execute non query. @@ -4682,41 +4815,15 @@ namespace DynamORM /// Number of affected rows. public virtual int Execute(IDynamicQueryBuilder builder) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(builder) - .ExecuteNonQuery(); - } + return Database.Execute(builder); } /// Execute non query. - /// Command builders. + /// Command builders. /// Number of affected rows. - public virtual int Execute(IDynamicQueryBuilder[] builers) + public virtual int Execute(IDynamicQueryBuilder[] builders) { - int ret = 0; - - using (var con = Database.Open()) - { - using (var trans = con.BeginTransaction()) - { - foreach (var builder in builers) - { - using (var cmd = con.CreateCommand()) - { - ret += cmd - .SetCommand(builder) - .ExecuteNonQuery(); - } - } - - trans.Commit(); - } - } - - return ret; + return Database.Execute(builders); } #endregion Basic Queries diff --git a/DynamORM/DynamicConnection.cs b/DynamORM/DynamicConnection.cs index dd84cd0..bd01537 100644 --- a/DynamORM/DynamicConnection.cs +++ b/DynamORM/DynamicConnection.cs @@ -148,7 +148,7 @@ namespace DynamORM /// to be used after a connection is opened. public string Database { - get { throw new NotImplementedException(); } + get { return Connection.Database; } } /// Gets the current state of the connection. diff --git a/DynamORM/DynamicDatabase.cs b/DynamORM/DynamicDatabase.cs index 57fc47f..751f14f 100644 --- a/DynamORM/DynamicDatabase.cs +++ b/DynamORM/DynamicDatabase.cs @@ -30,6 +30,7 @@ using System; using System.Collections.Generic; using System.Data; using System.Data.Common; +using System.Dynamic; using System.Linq; using System.Text; using DynamORM.Builders; @@ -878,6 +879,247 @@ namespace DynamORM #endregion From/Insert/Update/Delete + #region Procedure + + /// Execute stored procedure. + /// Name of stored procedure to execute. + /// Number of affected rows. + public virtual int Procedure(string procName) + { + return Procedure(procName, (DynamicExpando)null); + } + + /// Execute stored procedure. + /// Name of stored procedure to execute. + /// Arguments (parameters) in form of expando object. + /// Number of affected rows. + public virtual int Procedure(string procName, params object[] args) + { + if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) + throw new InvalidOperationException("Database connection desn't support stored procedures."); + + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(CommandType.StoredProcedure, procName) + .AddParameters(this, args) + .ExecuteNonQuery(); + } + } + + /// Execute stored procedure. + /// Name of stored procedure to execute. + /// Arguments (parameters) in form of expando object. + /// Number of affected rows. + public virtual int Procedure(string procName, DynamicExpando args) + { + if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) + throw new InvalidOperationException("Database connection desn't support stored procedures."); + + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(CommandType.StoredProcedure, procName) + .AddParameters(this, args) + .ExecuteNonQuery(); + } + } + + /// Execute stored procedure. + /// Name of stored procedure to execute. + /// Arguments (parameters) in form of expando object. + /// Number of affected rows. + public virtual int Procedure(string procName, ExpandoObject args) + { + if ((Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) + throw new InvalidOperationException("Database connection desn't support stored procedures."); + + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(CommandType.StoredProcedure, procName) + .AddParameters(this, args) + .ExecuteNonQuery(); + } + } + + #endregion Procedure + + #region Execute + + /// Execute non query. + /// SQL query containing numbered parameters in format provided by + /// methods. Also names should be formatted with + /// method. + /// Arguments (parameters). + /// Number of affected rows. + public virtual int Execute(string sql, params object[] args) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(sql).AddParameters(this, args) + .ExecuteNonQuery(); + } + } + + /// Execute non query. + /// Command builder. + /// Number of affected rows. + public virtual int Execute(IDynamicQueryBuilder builder) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(builder) + .ExecuteNonQuery(); + } + } + + /// Execute non query. + /// Command builders. + /// Number of affected rows. + public virtual int Execute(IDynamicQueryBuilder[] builders) + { + int ret = 0; + + using (var con = Open()) + { + using (var trans = con.BeginTransaction()) + { + foreach (var builder in builders) + { + using (var cmd = con.CreateCommand()) + { + ret += cmd + .SetCommand(builder) + .ExecuteNonQuery(); + } + } + + trans.Commit(); + } + } + + return ret; + } + + #endregion Execute + + #region Scalar + + /// Returns a single result. + /// SQL query containing numbered parameters in format provided by + /// methods. Also names should be formatted with + /// method. + /// Arguments (parameters). + /// Result of a query. + public virtual object Scalar(string sql, params object[] args) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(sql).AddParameters(this, args) + .ExecuteScalar(); + } + } + + /// Returns a single result. + /// Command builder. + /// Result of a query. + public virtual object Scalar(IDynamicQueryBuilder builder) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + { + return cmd + .SetCommand(builder) + .ExecuteScalar(); + } + } + + #endregion Scalar + + #region Query + + /// Enumerate the reader and yield the result. + /// SQL query containing numbered parameters in format provided by + /// methods. Also names should be formatted with + /// method. + /// Arguments (parameters). + /// Enumerator of objects expanded from query. + public virtual IEnumerable Query(string sql, params object[] args) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + using (var rdr = cmd + .SetCommand(sql) + .AddParameters(this, args) + .ExecuteReader()) + while (rdr.Read()) + { + dynamic val = null; + + // Work around to avoid yield being in try...catch block: + // http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch + try + { + val = rdr.RowToDynamic(); + } + catch (ArgumentException argex) + { + var sb = new StringBuilder(); + cmd.Dump(sb); + + throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb), + argex.InnerException.NullOr(a => a, argex)); + } + + yield return val; + } + } + + /// Enumerate the reader and yield the result. + /// Command builder. + /// Enumerator of objects expanded from query. + public virtual IEnumerable Query(IDynamicQueryBuilder builder) + { + using (var con = Open()) + using (var cmd = con.CreateCommand()) + using (var rdr = cmd + .SetCommand(builder) + .ExecuteReader()) + while (rdr.Read()) + { + dynamic val = null; + + // Work around to avoid yield being in try...catch block: + // http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch + try + { + val = rdr.RowToDynamic(); + } + catch (ArgumentException argex) + { + var sb = new StringBuilder(); + cmd.Dump(sb); + + throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb), + argex.InnerException.NullOr(a => a, argex)); + } + + yield return val; + } + } + + #endregion Query + #region Schema /// Builds query cache if necessary and returns it. diff --git a/DynamORM/DynamicTable.cs b/DynamORM/DynamicTable.cs index b8f9721..afcc320 100644 --- a/DynamORM/DynamicTable.cs +++ b/DynamORM/DynamicTable.cs @@ -28,10 +28,8 @@ using System; using System.Collections.Generic; -using System.Data; using System.Dynamic; using System.Linq; -using System.Text; using DynamORM.Builders; using DynamORM.Builders.Extensions; using DynamORM.Builders.Implementation; @@ -348,33 +346,7 @@ namespace DynamORM /// Enumerator of objects expanded from query. public virtual IEnumerable Query(string sql, params object[] args) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - using (var rdr = cmd - .SetCommand(sql) - .AddParameters(Database, args) - .ExecuteReader()) - while (rdr.Read()) - { - dynamic val = null; - - // Work around to avoid yield being in try...catch block: - // http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch - try - { - val = rdr.RowToDynamic(); - } - catch (ArgumentException argex) - { - var sb = new StringBuilder(); - cmd.Dump(sb); - - throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb), - argex.InnerException.NullOr(a => a, argex)); - } - - yield return val; - } + return Database.Query(sql, args); } /// Enumerate the reader and yield the result. @@ -382,32 +354,7 @@ namespace DynamORM /// Enumerator of objects expanded from query. public virtual IEnumerable Query(IDynamicQueryBuilder builder) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - using (var rdr = cmd - .SetCommand(builder) - .ExecuteReader()) - while (rdr.Read()) - { - dynamic val = null; - - // Work around to avoid yield being in try...catch block: - // http://stackoverflow.com/questions/346365/why-cant-yield-return-appear-inside-a-try-block-with-a-catch - try - { - val = rdr.RowToDynamic(); - } - catch (ArgumentException argex) - { - var sb = new StringBuilder(); - cmd.Dump(sb); - - throw new ArgumentException(string.Format("{0}{1}{2}", argex.Message, Environment.NewLine, sb), - argex.InnerException.NullOr(a => a, argex)); - } - - yield return val; - } + return Database.Query(builder); } /// Create new . @@ -431,13 +378,7 @@ namespace DynamORM /// Result of a query. public virtual object Scalar(string sql, params object[] args) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(sql).AddParameters(Database, args) - .ExecuteScalar(); - } + return Database.Scalar(sql, args); } /// Returns a single result. @@ -445,13 +386,7 @@ namespace DynamORM /// Result of a query. public virtual object Scalar(IDynamicQueryBuilder builder) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(builder) - .ExecuteScalar(); - } + return Database.Scalar(builder); } /// Execute stored procedure. @@ -459,16 +394,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Procedure(string procName) { - if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) - throw new InvalidOperationException("Database connection desn't support stored procedures."); - - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(CommandType.StoredProcedure, procName) - .ExecuteNonQuery(); - } + return Database.Procedure(procName); } /// Execute stored procedure. @@ -477,17 +403,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Procedure(string procName, params object[] args) { - if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) - throw new InvalidOperationException("Database connection desn't support stored procedures."); - - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(CommandType.StoredProcedure, procName) - .AddParameters(Database, args) - .ExecuteNonQuery(); - } + return Database.Procedure(procName, args); } /// Execute stored procedure. @@ -496,17 +412,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Procedure(string procName, DynamicExpando args) { - if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) - throw new InvalidOperationException("Database connection desn't support stored procedures."); - - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(CommandType.StoredProcedure, procName) - .AddParameters(Database, args) - .ExecuteNonQuery(); - } + return Database.Procedure(procName, args); } /// Execute stored procedure. @@ -515,17 +421,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Procedure(string procName, ExpandoObject args) { - if ((Database.Options & DynamicDatabaseOptions.SupportStoredProcedures) != DynamicDatabaseOptions.SupportStoredProcedures) - throw new InvalidOperationException("Database connection desn't support stored procedures."); - - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(CommandType.StoredProcedure, procName) - .AddParameters(Database, args) - .ExecuteNonQuery(); - } + return Database.Procedure(procName, args); } /// Execute non query. @@ -536,13 +432,7 @@ namespace DynamORM /// Number of affected rows. public virtual int Execute(string sql, params object[] args) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(sql).AddParameters(Database, args) - .ExecuteNonQuery(); - } + return Database.Execute(sql, args); } /// Execute non query. @@ -550,41 +440,15 @@ namespace DynamORM /// Number of affected rows. public virtual int Execute(IDynamicQueryBuilder builder) { - using (var con = Database.Open()) - using (var cmd = con.CreateCommand()) - { - return cmd - .SetCommand(builder) - .ExecuteNonQuery(); - } + return Database.Execute(builder); } /// Execute non query. - /// Command builders. + /// Command builders. /// Number of affected rows. - public virtual int Execute(IDynamicQueryBuilder[] builers) + public virtual int Execute(IDynamicQueryBuilder[] builders) { - int ret = 0; - - using (var con = Database.Open()) - { - using (var trans = con.BeginTransaction()) - { - foreach (var builder in builers) - { - using (var cmd = con.CreateCommand()) - { - ret += cmd - .SetCommand(builder) - .ExecuteNonQuery(); - } - } - - trans.Commit(); - } - } - - return ret; + return Database.Execute(builders); } #endregion Basic Queries