Интерфейс доступа к словарю Solarix.IDataAccessLayer

Этот .NET класс инкапсулирует средства для работы с конкретной СУБД, скрывая от остального кода особенности реализации, ограничения или диалектные отличия используемого хранилища грамматического словаря, к примеру способ генерации уникальных первичных ключей или технологию подключения.

Для каждой версии СУБД и программного способа работы с ней необходим класс, унаследованный от IDataAccessLayer - см. далее. Так как в состав SDK входят исходные тексты всех классов библиотеки, можно написать интерфейс доступа для других СУБД на основе имеющихся, либо модифицировать имеющиеся. Кроме того, благодаря поддержке ODBC, можно начать работу с новыми СУБД с минимальными усилиями.

Исходный текст - файл IDataAccessLayer.cs

MSSQL_DataAccessLayer - провайдер для MS SQL через ADO.NET

Конструктор получает единственный аргумент - объект класса System.Data.SqlClient.SqlConnection для используемого соединения. Обратите внимание на свойство MultipleActiveResultSets=true в строке подключения. Без него работа с грамматическим словарем может приводить к ошибкам и генерации исключительных ситуаций.

Пример подключения к MS SQL:

   SqlConnection cnx = new SqlConnection(
                                         "Data Source=localhost;"+
                                         "Initial Catalog=solarix;"+
                                         "Integrated Security=True;"+
                                         "MultipleActiveResultSets=true;"
                                        );
   cnx.Open();
   
   MSSQL_DataAccessLayer dal = new MSSQL_DataAccessLayer(cnx);
   Solarix.Dictionary dict = new Solarix.Dictionary(dal);

   // ...

MySQL_DataAccessLayer - доступ к словарю в MySQL через официальный .NET Provider.

Конструктор получает единственный аргумент - объект класса MySql.Data.MySqlClient.MySqlConnection для используемого соединения.

Пример подключения к MySQL:

   string cnx_string = "server=localhost;user id=root; password=; database=solarix; pooling=false;";
   MySql.Data.MySqlClient.MySqlConnection cnx = new MySql.Data.MySqlClient.MySqlConnection(cnx_string);
   cnx.Open();
   MySQL_DataAccessLayer dal = new MySQL_DataAccessLayer(cnx);
   Solarix.Dictionary dict = new Solarix.Dictionary(dal);

   // ...

Альтернативный способ подключения к морфологическому словарю в MySQL - использование "неуправляемой" Win32 DLL с процедурным API, скомпилированной в варианте с поддержкой MySQL. В конфигурационном файле словаря есть механизм задания строки подключения к базе данных, при этом используется самый низкоуровневый API сервера БД.

FireBird_DataAccessLayer - доступ к словарю в FireBird через официальный .NET provider.

Конструктор получает единственный аргумент - объект класса FirebirdSql.Data.FirebirdClient.FbConnection для используемого соединения.

Пример подключения к FireBird:

   FirebirdSql.Data.FirebirdClient.FbConnectionStringBuilder cs = new FirebirdSql.Data.FirebirdClient.FbConnectionStringBuilder();
        
   cs.DataSource = "localhost";
   cs.Database = "e:\\db\\solarix.fdb";
   cs.UserID = "SYSDBA";
   cs.Password = "masterkey";
   cs.Dialect = 3;
   cs.Charset = "UTF8";
        
   string cnx_string = cs.ToString();

   FirebirdSql.Data.FirebirdClient.FbConnection cnx = new FirebirdSql.Data.FirebirdClient.FbConnection(cnx_string);
   cnx.Open();
   FireBird_DataAccessLayer dal = new FireBird_DataAccessLayer(cnx);
   Solarix.Dictionary dict = new Solarix.Dictionary(dal);

   // ...

Oracle_DataAccessLayer - доступ к словарю в Oracle через официальный .NET provider.

Конструктор получает единственный аргумент - объект класса Oracle.DataAccess.Client.OracleConnection для используемого соединения.

Пример подключения к Oracle:

   string cnx_string = "Data Source=TEST;User Id=USERNAME;Password=masterkey;";
   Oracle.DataAccess.Client.OracleConnection cnx = new Oracle.DataAccess.Client.OracleConnection(cnx_string);
   cnx.Open();
   Oracle_DataAccessLayer dal = new Oracle_DataAccessLayer(cnx);

   // ...

ODBC_DataAccessLayer - обобщенный провайдер для доступа к словарю через ODBC

Конструктор получает единственный аргумент - объект класса System.Data.Odbc.OdbcConnection для используемого соединения. Реализация доступа к грамматическому словарю через ODBC имеет особенности, связанные главным образом с редактированием. Дело в том, что для этого варианта нет общего, не зависимого от конкретной модели БД, способа генерации первичных ключей. Вместо этого в коде этого класса зашит универсальный, но недопустимый во многих случаях способ через Coalesce(Max(...)+1,0). Поэтому перед использованием данного класса следует убедиться, что это не вступит в противоречие с архитектурой клиент-серверного приложения.

Пример подключения:

   System.Data.Odbc.OdbcConnection cnx = new System.Data.Odbc.OdbcConnection("Dsn=solarix_firebird;");
   cnx.Open();
   ODBC_DataAccessLayer dal = new ODBC_DataAccessLayer(cnx);

   // ...

Навигация

Вернуться к описанию ORM

English version of the page

Подключение к словарной базе в процедурном API грамматического словаря

  © Козиев Илья 2019
изменено 13-Mar-11