예제 #1
0
 private static void DoProcessSqlSyncQueue(string workingKey, byte[][] bufferBytes)
 {
     try
     {
         bool hasClear = false;
         foreach (var buffer in bufferBytes)
         {
             DbBaseProvider dbProvider = null;
             SqlStatement   statement  = null;
             try
             {
                 statement  = ProtoBufUtils.Deserialize <SqlStatement>(buffer);
                 dbProvider = DbConnectionProvider.CreateDbProvider("", statement.ProviderType, statement.ConnectionString);
                 var paramList = ToSqlParameter(dbProvider, statement.Params);
                 dbProvider.ExecuteQuery(statement.CommandType, statement.CommandText, paramList);
             }
             catch (Exception e)
             {
                 TraceLog.WriteSqlError("Error:{0}\r\nSql>>\r\n{1}", e, statement != null ? statement.CommandText : "");
                 PutError(buffer);
                 if (!hasClear && dbProvider != null)
                 {
                     //modify error: 40 - Could not open a connection to SQL Server
                     hasClear = true;
                     dbProvider.ClearAllPools();
                 }
             }
         }
     }
     catch (Exception ex)
     {
         TraceLog.WriteError("DoProcessSqlSyncQueue error:{0}", ex);
     }
 }
예제 #2
0
        private static void DoProcessSqlSyncQueue(string workingKey, byte[][] bufferBytes)
        {
            try
            {
                bool hasClear = false;
                foreach (var buffer in bufferBytes)
                {
                    DbBaseProvider dbProvider = null;
                    SqlStatement   statement  = null;
                    int            result     = 0;
                    try
                    {
                        statement  = ProtoBufUtils.Deserialize <SqlStatement>(buffer);
                        dbProvider = DbConnectionProvider.CreateDbProvider("", statement.ProviderType,
                                                                           statement.ConnectionString);
                        var paramList = ToSqlParameter(dbProvider, statement.Params);
                        result = dbProvider.ExecuteQuery(statement.CommandType, statement.CommandText, paramList);
                    }
                    catch (DbConnectionException connError)
                    {
                        TraceLog.WriteSqlError("SqlSync Error:{0}\r\nSql>>\r\n{1}", connError,
                                               statement != null ? statement.ToString() : "");
                        if (dbProvider != null)
                        {
                            //modify error: 40 - Could not open a connection to SQL Server
                            dbProvider.ClearAllPools();

                            //resend
                            var paramList = ToSqlParameter(dbProvider, statement.Params);
                            result = dbProvider.ExecuteQuery(statement.CommandType, statement.CommandText, paramList);
                        }
                        else
                        {
                            PutError(buffer, SqlSyncConnErrorQueueKey);
                        }
                    }
                    catch (Exception e)
                    {
                        TraceLog.WriteSqlError("SqlSync Error:{0}\r\nSql>>\r\n{1}", e,
                                               statement != null ? statement.ToString() : "");
                        PutError(buffer);
                        if (!hasClear && dbProvider != null)
                        {
                            //modify error: 40 - Could not open a connection to SQL Server
                            hasClear = true;
                            dbProvider.ClearAllPools();
                        }
                    }
                    finally
                    {
                        if (result > 0)
                        {
                            ProfileManager.ProcessSqlOfMessageQueueTimes(statement != null ? statement.Table : null);
                        }
                        else
                        {
                            ProfileManager.ProcessFailSqlOfMessageQueueTimes(statement != null ? statement.Table : null, 1);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                TraceLog.WriteError("DoProcessSqlSyncQueue error:{0}\r\n", ex.Message, ex.StackTrace);
            }
        }