Exemple #1
0
        /// <summary>
        /// Executes the command described by <see cref="query"/> on the server and
        /// runs the method <paramref name="mapper"/> to map the result set to
        /// the type <typeparamref name="T"/>.
        /// </summary>
        /// <typeparam name="T">
        /// The type of the object that should be returned.
        /// </typeparam>
        /// <param name="query">
        /// The query to be executed on the server.
        /// </param>
        /// <param name="command_type">
        /// The type of the command that is described by the
        /// <paramref name="query"/> parameter.
        /// </param>
        /// <param name="mapper">
        /// A <see cref="Func{TResult}"/> that builds a
        /// <see cref="IDataReaderMapper{T}"/> that can be used to map
        /// result of the given <paramref name="query"/> to a
        /// object of the type <typeparamref name="T"/>.
        /// </param>
        /// <param name="set_parameters">
        /// A <see cref="Action{T}"/> that allows the caller to set the values
        /// of the parameters defined on the given query.
        /// </param>
        /// <returns>
        /// The object produced by the execution of the method
        /// <paramref name="mapper"/>.
        /// </returns>
        /// <remarks>
        /// The mapper returned from the <see cref="Func{TResult}"/> is cached
        /// internally and associated with the given <paramref name="query"/>. The
        /// cache is never flushed. If you are generating SQL strings on the fly
        /// without using parameters it is possible you hit memory issues.
        /// </remarks>
        public IQueryMapper <T> ExecuteQuery <T>(string query,
                                                 Func <IDataReaderMapper <T> > mapper,
                                                 Action <CommandBuilder> set_parameters,
                                                 CommandType command_type)
        {
            MySqlConnection conn    = mysql_connection_provider_.CreateConnection();
            var             builder = new CommandBuilder(conn);
            IDbCommand      cmd     = builder
                                      .SetText(query)
                                      .SetType(command_type)
                                      .Set(set_parameters)
                                      .Build();

            try {
                conn.Open();
                IDataReader reader = cmd.ExecuteReader();
                var         m      = (IDataReaderMapper <T>)cache_.GetOrAdd(query, s => mapper());
                return(new QueryMapper <T>(m, reader, new IDisposable[] { builder, conn }));
            } catch (MySqlException e) {
                logger_.Error(
                    StringResources
                    .Log_MethodThrowsException
                    .Fmt("ExecuteQuery", kClassName), e);
                builder.Dispose();
                conn.Dispose();
                throw e.AsProviderException();
            } catch {
                builder.Dispose();
                conn.Dispose();
                throw;
            }
        }
 /// <exception cref="ProviderException">
 /// An exception has occured while executing the query.
 /// </exception>
 public bool Execute(string name, out string state)
 {
     using (SqlConnection conn = sql_connection_provider_.CreateConnection())
         using (var builder = new CommandBuilder(conn)) {
             IDbCommand cmd = builder
                              .SetText(sql_connection_provider_.Schema + kExecute)
                              .SetType(CommandType.StoredProcedure)
                              .AddParameter(kNameParameter, name)
                              .Build();
             try {
                 conn.Open();
                 object obj = cmd.ExecuteScalar();
                 if (obj != null)
                 {
                     state = (string)obj;
                     return(true);
                 }
             } catch (SqlException e) {
                 logger_.Error(string.Format(
                                   R.Log_MethodThrowsException, "Execute", kClassName), e);
                 throw new ProviderException(e);
             }
             state = null;
             return(false);
         }
 }
Exemple #3
0
 public int Execute(string state_name, string table_name,
                    bool likely = false)
 {
     using (var scope =
                new TransactionScope(SupressTransactions
   ? TransactionScopeOption.Suppress
   : TransactionScopeOption.Required)) {
         using (SqlConnection conn = sql_connection_provider_.CreateConnection())
             using (var builder = new CommandBuilder(conn)) {
                 IDbCommand cmd = builder
                                  .SetText("delete from " + table_name +
                                           " where state_name " + (likely ? " like " : "=") + "@name")
                                  .SetType(CommandType.Text)
                                  .AddParameter("@name", state_name)
                                  .Build();
                 try {
                     conn.Open();
                     int affected = cmd.ExecuteNonQuery();
                     scope.Complete();
                     return(affected);
                 } catch (SqlException e) {
                     logger_.Error(
                         StringResources.Log_MethodThrowsException.Fmt("Execute",
                                                                       kClassName),
                         e);
                     throw e.AsProviderException();
                 }
             }
     }
 }
Exemple #4
0
 public bool Execute <T>(string state_name, string table_name, out T state)
 {
     using (
         new TransactionScope(SupressTransactions
   ? TransactionScopeOption.Suppress
   : TransactionScopeOption.Required)) {
         using (
             SqlCeConnection conn = sql_connection_provider_.CreateConnection())
             using (var builder = new CommandBuilder(conn)) {
                 IDbCommand cmd = builder
                                  .SetText("select state from " + table_name + " where name=@name")
                                  .SetType(CommandType.Text)
                                  .AddParameter("@name", state_name)
                                  .Build();
                 try {
                     conn.Open();
                     object obj = cmd.ExecuteScalar();
                     if (obj == null)
                     {
                         state = default(T);
                         return(false);
                     }
                     state = (T)obj;
                     return(true);
                 } catch (SqlCeException e) {
                     logger_.Error(
                         StringResources.Log_MethodThrowsException.Fmt("Execute",
                                                                       kClassName),
                         e);
                     throw e.AsProviderException();
                 }
             }
     }
 }
 public T ExecuteQuery <T>(string query, Func <IDataReader, T> mapper,
                           Action <CommandBuilder> set_parameters, CommandType command_type)
 {
     using (SqlConnection conn = sql_connection_provider_.CreateConnection())
         using (var builder = new CommandBuilder(conn)) {
             IDbCommand cmd = builder
                              .SetText(query)
                              .SetType(command_type)
                              .Set(set_parameters)
                              .Build();
             try {
                 conn.Open();
                 using (IDataReader reader = cmd.ExecuteReader()) {
                     return(mapper(reader));
                 }
             } catch (SqlException e) {
                 logger_.Error(
                     StringResources
                     .Log_MethodThrowsException
                     .Fmt("ExecuteQuery", kClassName), e);
                 throw e.AsProviderException();
             }
         }
 }
Exemple #6
0
 /// <inheritdoc/>
 public void Execute(string name, string state)
 {
     using (SqlConnection conn = sql_connection_provider_.CreateConnection())
         using (var builder = new CommandBuilder(conn)) {
             IDbCommand cmd = builder
                              .SetText(sql_connection_provider_.Schema + kExecute)
                              .SetType(CommandType.StoredProcedure)
                              .AddParameter(kNameParameter, name)
                              .AddParameter(kStateParameter, state)
                              .Build();
             try {
                 conn.Open();
                 cmd.ExecuteNonQuery();
             } catch (SqlException e) {
                 logger_.Error(
                     string.Format(R.Log_MethodThrowsException, "Execute", kClassName), e);
                 throw new ProviderException(e);
             }
         }
 }
 public IHiLoRange Execute(string key)
 {
     using (SqlConnection conn = sql_connection_provider_.CreateConnection())
         using (var builder = new CommandBuilder(conn)) {
             IDbCommand cmd = builder
                              .SetText(sql_connection_provider_.Schema + kExecute)
                              .SetType(CommandType.StoredProcedure)
                              .AddParameter(kKeyParameter, key)
                              .Build();
             try {
                 conn.Open();
                 using (IDataReader reader = cmd.ExecuteReader()) {
                     return(mapper_.Map(reader));
                 }
             } catch (SqlException e) {
                 logger_.Error(string.Format(
                                   StringResources.Log_MethodThrowsException, "Execute", kClassName), e);
                 throw new ProviderException(e);
             }
         }
 }
Exemple #8
0
 void LogError(Exception e, string method)
 {
     logger_.Error(string.Format(StringResources.Log_MethodThrowsException,
                                 method, kClassName), e);
 }