1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

[C#] EasyMysql

Тема в разделе 'Soft (не относящийся к определенной игре)', создана пользователем LiptoN[Triton], 27 фев 2016.

  1. TopicStarter Overlay

    LiptoN[Triton] Пользователи

    Сообщения:
    441
    Лайки:
    209
    Пол:
    Мужской
    Репутация:
    2
    Страна:
    Russian Federation Russian Federation
    Привет, от нечего делать написал для себя либу для работы с несколькими базами данных.
    Не знаю кому, но может кому то будет полезна.

    Функционал:
    Отправка SQL запросиков
    Отпровка SQL запросиков из файла
    Возможность соединений с N количеством Баз Данных

    Функции:
    • AllConnect() - соединение со всеми базами которые вы укажите
    • SendSqlToDB(string SQL, string DB) - отправка SQl в базу
    • SendSqlFromFile(string PathToFile, string DB) - понятно и так
    • GetConnectString(string IP, string USER, string PASSWORD, string PORT, string DB) - получаем строку для конекта
    • AddConnect(params string[] CONF) - добавляем новое соединение (для AllConnect())

    Собственно все. Пример использования:


    Скачать: https://yadi.sk/d/eSAfc8Vipcqmq
    --- добавлено: 27 фев 2016 в 19:58 ---
    Забыл добавить, в случае удачного коннекта: [​IMG]
    Последнее редактирование модератором: 6 мар 2016
    Nanaya, BIOS23, Homriel и ещё 1-му нравится это.
  2. pdev 14:23 Команда форума Администратор Программист Open Source Contributor

    Сообщения:
    1.408
    Лайки:
    1.405
    Пол:
    Мужской
    Репутация:
    7
    Команда:
    Indy
    Страна:
    Turkey Turkey
    Вроде бы взрослые люди... так тяжело залить в bitbucket в виде сорсов?
    Юзать DataTable - это срань в работе с крупными БД.
    Еще и обфусцировал)))) Господи, куда катится мир...
    Как это вообще скомпилилось?
    Архитектура для подобного функционала нужна статическая для удобства вызова и возможности заюзать в многопотоковой среде.
    PHP:
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Threading;

    namespace 
    AxEGAIS.Core {
        public class 
    AxDb {
            public static List<
    ConnectionActivePool;

            private static 
    void CheckPool() {
                if (
    ActivePool == null)
                    
    ActivePool = new List<Connection>();
            }

            public static 
    bool IsExists(string name) {
                
    CheckPool();
                
    lock (ActivePool) {
                    try {
                        return 
    ActivePool.Any(=> t.Name == name);
                    }
                    catch {
                        return 
    false;
                    }
                }
            }

            public static 
    bool IsExists(Databases database) {
                
    CheckPool();
                
    lock (ActivePool) {
                    return 
    ActivePool.AsParallel().Any(=> t.Database == database);
                }
            }

            public static 
    Connection Find(string name) {
                
    CheckPool();
                
    lock (ActivePool) {
                    try {
                        return 
    ActivePool.FirstOrDefault(=> t.Name == name);
                    }
                    catch {
                        return 
    null;
                    }
                }
            }

            public static 
    Connection Find(Databases database) {
                
    CheckPool();
                
    lock (ActivePool) {
                    return 
    ActivePool.AsParallel().FirstOrDefault(=> t.Database == database);
                }
            }

            public static 
    Connection New(string nameDatabases databaseout SqlException sqlException) {
                
    sqlException null;

                if (
    IsExists(name))
                    
    Close(name);
                
    SqlConnection sqlConn null;
                switch (
    database) {
                    case 
    Databases.Axapta:
                        
    sqlConn = new SqlConnection(new SqlConnectionStringBuilder {
    #if DEBUG
                            
    DataSource "Host",
                            
    InitialCatalog "dbname_test",
    #else
                            
    DataSource "Host",
                            
    InitialCatalog "dbname_prod",
    #endif
                            
    IntegratedSecurity true,
                            
    ConnectTimeout 3600,
                            
    MinPoolSize 20
                        
    }.ConnectionString);
                        break;
                }
                if (
    sqlConn == null)
                    return 
    null;

                var 
    conn = new Connection {
                    
    Name name,
                    
    Database database,
                    
    SqlConnection sqlConn
                
    };
                
    lock (ActivePool) {
                    
    ActivePool.Add(conn);
                    return 
    Find(name);
                }
            }

            public static 
    void Close(string name) {
                if (!
    IsExists(name))
                    return;
                var 
    conn Find(name);
                if (
    conn == null)
                    return;
                
    lock (conn.SqlConnection) {
                    
    conn.SqlConnection?.Close();
                    try {
                        
    ActivePool.RemoveAll(=> t.Name == name);
                    }
                    catch { }
                }
            }
        }

        public 
    enum Databases {
            
    Axapta,
        }

        public class 
    Connection {
            public 
    string Name getset; }
            public 
    Databases Database getset; }
            public 
    SqlConnection SqlConnection getset; }
        }
    }
    Вызов этого дела из кода:
    PHP:
    SqlException sqlExeption;
                var 
    conn AxDb.New($"AxDb{Thread.CurrentThread.ManagedThreadId}"Databases.Axaptaout sqlExeption);
                
    using (var cmd conn.SqlConnection.CreateCommand()) {
                    if (
    conn.SqlConnection.State != ConnectionState.Open)
                        
    conn.SqlConnection.Open();
                    
    cmd.CommandText = @"SELECT  ExportPath, ImportPath, ExportFamily, ImportFamily, ImportPathArchive,
                                                ExportXmlTemplateRepository, LifetimeInMessages, LifetimeOutMessages, ThreadPoolSize,
                                                DebugInOpCodes, DebugOutOpCodes, ReleaseInOpCodes, ReleaseOutOpCodes, EGAISDataAreaId, EGAISRefDataAreaId,
                                                RepeatReprocessingInMessages, RepeatReprocessingOutMessages, ItemTypeConsumerPropertyId, ServiceHost, ServiceUpdateInterval
                                                FROM EGAISParameters"
    ;
                    
    using (var cmd.ExecuteReader()) {
                        if (!
    r.Read())
                            return;
                        
    ExportPath r.GetString(0);
                        
    ImportPath r.GetString(1);
                        
    ExportFamily r.GetString(2);
                        
    ImportFamily r.GetString(3);
                        
    ImportPathArchive r.GetString(4);
                        
    ExportXmlTemplateRepository r.GetString(5);
                        
    LifetimeInMessages r.GetInt32(6);
                        
    LifetimeOutMessages r.GetInt32(7);
                        
    ThreadPoolSize r.GetInt32(8);
                        
    DebugInOpCodes r.GetString(9);
                        
    DebugOutOpCodes r.GetString(10);
                        
    ReleaseInOpCodes r.GetString(11);
                        
    ReleaseOutOpCodes r.GetString(12);
                        
    DataAreaId r.GetString(13).ToLower();
                        
    RefDataAreaId r.GetString(14).ToLower();
                        
    RepeatReprocessingInMessages r.GetInt32(15);
                        
    RepeatReprocessingOutMessages r.GetInt32(16);
                        
    ItemTypeConsumerPropertyId r.GetString(17);
                        
    ServiceHost r.GetString(18);
                        
    ServiceUpdateInterval r.GetInt32(19);
                    }
                }
                
    QueryTemplateRepository = new EGAISQueryTemplateRepository();
    PS: И что там может быть такого секретного, чтобы обфусцировать код =)
    Последнее редактирование: 28 фев 2016
    Гадес и Joslian нравится это.
  3. Гадес ОРБИТАЛЬНЫЙ ПОДЖИГАТЕЛЬ Old school Пользователи Ты здесь Господи? Это я, Дин Винчестер

    Сообщения:
    543
    Лайки:
    353
    Пол:
    Мужской
    Репутация:
    8
    Команда:
    DeBalance Art Team
    Страна:
    Russian Federation Russian Federation
    Пойду тоже свою обертку вокруг пдо обфусцирую хД
Черновик сохранён Черновик удалён

Поделиться этой страницей