コード例 #1
0
ファイル: DataAccess.cs プロジェクト: fabrimaciel/gda
        /// <summary>
        /// Executa a stored procedure usando a sessão.
        /// </summary>
        /// <param name="session"></param>
        /// <param name="procedure"></param>
        /// <returns>Número de linhas afetadas.</returns>
        public int ExecuteCommand(GDASession session, GDAStoredProcedure procedure)
        {
            IDbConnection conn        = CreateConnection(session);
            IDbCommand    cmd         = CreateCommand(session, conn);
            int           valueReturn = 0;

            try
            {
                procedure.Prepare(cmd, UserProvider);
                if (session == null && conn.State != ConnectionState.Open)
                {
                    try
                    {
                        conn.Open();
                    }
                    catch (Exception ex)
                    {
                        throw new GDAException(ex);
                    }
                    GDAConnectionManager.NotifyConnectionOpened(conn);
                }
                try
                {
                    SendMessageDebugTrace(cmd.CommandText);
                    valueReturn = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw new GDAException("StoredProcedure: " + cmd.CommandText + ". --> " + ex.Message, ex);
                }
                for (int i = 0; i < cmd.Parameters.Count; i++)
                {
                    procedure[i] = ((IDbDataParameter)cmd.Parameters[i]).Value;
                }
            }
            finally
            {
                try
                {
                    cmd.Dispose();
                    cmd = null;
                }
                finally
                {
                    if (session == null)
                    {
                        conn.Close();
                        conn.Dispose();
                    }
                }
            }
            return(valueReturn);
        }
コード例 #2
0
ファイル: DataAccess.cs プロジェクト: fabrimaciel/gda
        public GDACursor <T> LoadValues <T>(GDASession session, GDAStoredProcedure procedure) where T : new()
        {
            IDbConnection conn = CreateConnection(session);
            IDbCommand    cmd  = CreateCommand(session, conn);

            cmd.Connection = conn;
            procedure.Prepare(cmd, UserProvider);
            return(new GDACursor <T>(UserProvider, session, conn, cmd, (sender, e) => {
                for (int i = 0; i < cmd.Parameters.Count; i++)
                {
                    var dataParamter = (IDbDataParameter)cmd.Parameters[i];
                    if (dataParamter.Direction == ParameterDirection.Output || dataParamter.Direction == ParameterDirection.ReturnValue)
                    {
                        procedure[i] = ((IDbDataParameter)cmd.Parameters[i]).Value;
                    }
                }
            }));
        }
コード例 #3
0
ファイル: DataAccess.cs プロジェクト: fabrimaciel/gda
        public object ExecuteScalar(GDASession session, GDAStoredProcedure procedure)
        {
            IDbConnection conn        = CreateConnection(session);
            IDbCommand    cmd         = CreateCommand(session, conn);
            object        valueReturn = null;

            try
            {
                procedure.Prepare(cmd, UserProvider);
                if (session == null && conn.State != ConnectionState.Open)
                {
                    try
                    {
                        conn.Open();
                    }
                    catch (Exception ex)
                    {
                        throw new GDAException(ex);
                    }
                    GDAConnectionManager.NotifyConnectionOpened(conn);
                }
                SendMessageDebugTrace(cmd.CommandText);
                try
                {
                    using (var executionHandler = Diagnostics.GDATrace.CreateExecutionHandler(cmd))
                        try
                        {
                            valueReturn = cmd.ExecuteScalar();
                        }
                        catch (Exception ex)
                        {
                            executionHandler.Fail(ex);
                            throw ex;
                        }
                }
                catch (Exception ex)
                {
                    throw new GDAException("StoredProcedure: " + cmd.CommandText + "; --> " + ex.Message, ex);
                }
                for (int i = 0; i < cmd.Parameters.Count; i++)
                {
                    procedure[i] = ((IDbDataParameter)cmd.Parameters[i]).Value;
                }
            }
            finally
            {
                try
                {
                    cmd.Dispose();
                    cmd = null;
                }
                finally
                {
                    if (session == null)
                    {
                        conn.Close();
                        conn.Dispose();
                    }
                }
            }
            return(valueReturn);
        }