Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Упрощаем себе жизнь 2 (Postgresql asp.net)

Anna | 17.06.2014 | нет комментариев
Чуть больше года назад, стояла задача написания web приложения работающая с БД Postgresql. К моему сожалению, стандартного адаптера для работы с БД PostgreSQL не было, а с тем, что был обнаружен на просторах интернета ( безвозмездный ) трудиться было не допустимо.
В результате было решено обойтись библиотекой Npgsql.
Как трудиться с этой библиотекой, есть документация и уйма примеров в интернете. Сразу же позже начала работы с ней, мне не понравилось, что необходимо много писать однотипного кода. Для упрощения работы была сделана добавочная прослойка в виде отдельного класса, для работы с БД через данную библиотеку.

Особенности:
1. данные для подключения берутся с файла web.config
2. есть вероятность для работы с несколькими подключениями. ( скажем если у плана модульная система, и всякий модуль работает только со своей схемой )

пример части из web.config

  <appSettings>
    <!-- Подключение к БД -->
    <add key="ProviderName" value="PostgreSQL" />
    <add key="DataBase" value="DataBaseName" />
    <add key="Port" value="80" />
    <add key="Host" value="DataBaseHost" />
    <!-- Данные подключения к БД для ядра  системы -->
    <add key="UserName0" value="UserNameCore" />
    <add key="Password0" value="PasswordCore" />
    <add key="Schema0" value="SchemaCore" />
    <!-- Данные подключения к БД для 1го модуля системы -->
    <add key="UserName1" value="UserNameModule1" />
    <add key="Password1" value="PasswordModule1" />
    <add key="Schema1" value="SchemaModule1" />
  </appSettings>

в отдельном классе так же дозволено объявить константы, для последующего комфорта

        public static int mkCore = 0;
        public static int mkModule1 = 1;

публичные способы класса WRKDataBase

         public WRKDataBase(int module)   // инициализация класса
         public bool Connected()                     // проверка, есть ли у экземпляра класса подключение к БД
         public NpgsqlConnection CreateConnection()   // создаем подключение к БД
         public DbCommand CreateCommand(string SQLString)  //создаем "команду"
         private bool RepairCommand(DbCommand Command, string SQLString)  // если "команда" есть, то присваиваем новейший запрос напротив создается
         public void AddCommandParam(ref DbCommand Command, string Param_name, object Param_value, DbType Type)   //добавляем параметр к "команде"
         public void AddCommandParamNull(ref DbCommand Command, string Param_name)  // добавляет параметр со значением NULL
         public bool CommandExecute(string SQLString="")   // выполнение sql запроса
         public bool CommandExecute(DbCommand Command)  // выполнение "команды"   
         public DbDataReader CreateReader(string SQLString)  //создание "ридера" по sql запросу
         public DbDataReader CreateReader(DbCommand Command)  // создание "ридера" по "команде"
         public DbDataAdapter CreateDataAdapter(string SQLString)  // создание "адаптера", по SQL запросу
         public bool UpdateAdapter(ref DbDataAdapter dbDataAdapter, DataSet dataSet)  //обновить данные в "адаптере" из "датасета"
         public void AddCommandToAdapter( DbDataAdapter datadapter, DbCommand Command, string action )  //добавление "команды" "адаптеру"
         public bool CreateDataSet(DataSet Dataset, string SQLString)  // создание датасета из итога sql запроса
         public bool FillDataSet(ref DataSet dataSet, string SQLString, string datasetTableName) // заполняет "датасет" итогом sql запроса
         public void Dispose()  // истребление класса
 

в SQL запросах название таблиц, вьюшек, функций и т.д. необходимо оборачивать в “~”, напрмер

 Select id, name from ~years~

тогда для подключения к ядру системы будет довольно

            WRKDataBase wrkDataBase  = new WRKDataBase("допклассконстантами".mkCore);

для работы правда теснее исползуем не DataSource, а ObjectDataSource. ( Описние ObjectDataSource на msdn)

Пример:
класс изложения объекта

    public class sYear
    {
        public string god { get; set; }
        public string naimen { get; set; }

public sYear(IDataRecord rec)
        {
            if (rec["god"] != null) { god = rec["god"].ToString(); };
            if (rec["naimen"] != null) { naimen = rec["naimen"].ToString(); };
        }

        public sYear(string pgod, string pnaimen)
        {
            god = pgod;
            naimen = pnaimen;
        }
    }

класс работы с БД

    public class sYearDB
    {
        public List<sYear> SelectListYear()
        {
            WRKDataBase wrkDataBase;
            wrkDataBase = new WRKDataBase("допклассконстантами".mkModule1);
            List<sYear> ret = new List<sYear>();
            ret.Add(new sYear("0", "Все"));
                var rdr = wrkDataBase.CreateReader("Select god, god as naimen from ~vyear~ order by god");
                while (rdr.Read())
                    ret.Add(new sYear(rdr));
                rdr.Close();
            wrkDataBase.Dispose();
            return ret;
        }
    }

датасорс:

    <asp:ObjectDataSource ID="dsYear" runat="server" SelectMethod="SelectListYear"
            TypeName="DBNameSpace.sYearDB" 
            DataObjectTypeName="DBNameSpace.sYear">
    </asp:ObjectDataSource>

PS класс прослойки выложу как только будет вероятность.

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB