Этот .NET класс инкапсулирует средства для работы с конкретной СУБД, скрывая от остального кода особенности реализации, ограничения или диалектные отличия используемого хранилища грамматического словаря, к примеру способ генерации уникальных первичных ключей или технологию подключения.
Для каждой версии СУБД и программного способа работы с ней необходим класс, унаследованный от IDataAccessLayer - см. далее. Так как в состав SDK входят исходные тексты всех классов библиотеки, можно написать интерфейс доступа для других СУБД на основе имеющихся, либо модифицировать имеющиеся. Кроме того, благодаря поддержке ODBC, можно начать работу с новыми СУБД с минимальными усилиями.
Исходный текст - файл IDataAccessLayer.cs
Конструктор получает единственный аргумент - объект класса 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.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 сервера БД.
Конструктор получает единственный аргумент - объект класса 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.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); // ...
Конструктор получает единственный аргумент - объект класса 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);
// ...
Подключение к словарной базе в процедурном API грамматического словаря
© Elijah Koziev 2010
Поисковая система
SDK Поисковой системы
Экранный переводчик
|
|
изменено 13-Mar-11 | ||||||||||||||||||||||||||||||||||||||