> For the complete documentation index, see [llms.txt](https://nas-3.gitbook.io/nasdatabase/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nas-3.gitbook.io/nasdatabase/database/databaseapi-fast-start.md).

# DatabaseAPI - fast start

`Database` представляет собой базовый класс для взаимодействия с вашей базой данных и занимает наивысший уровень абстракции (уровень 3) в архитектуре программы. Он расположен в пространстве имен:

> NASDatabaseAPI.Server.Data.Database

Для создания экземпляра этого класса достаточно вызвать конструктор и предоставить базовые данные. Однако это не обеспечивает возможности хранения данных на носителях. Для этого необходимо воспользоваться функционалом `DatabaseManager`.

{% hint style="info" %}
&#x20;[DatabaseManager](/nasdatabase/database/class-databasemanager.md) является базовым классом для загрузки и создания проекта с базой данных. Он ответствен за первичную настройку класса Database, загрузку соответствующих настроек (DatabaseSettings) и выполнение других важных операций. Этот класс имеет ключевое значение для обеспечения нормальной работы базы данных.
{% endhint %}

> NASDataBaseAPI.Server.Data.DataBaseSetting.DataBaseSettings

### Первичное создание базы данных

Для создания проекта и загрузки базы данных необходимо создать экземпляр класса `DatabaseManager` и вызвать его метод `CreateDatabase(string Path, DatabaseSettings databaseSettings)`. В этот метод следует передать экземпляр стартовых настроек для базы данных (их рассмотрим далее).

{% tabs %}
{% tab title="Самый простой пример" %}

```csharp
//C# 
DatabaseManager DBM = new DatabaseManager();//Создание экземпляра DataBaseManager
 
var DBS = new DatabaseSettings("Test", "D:\\");//Передаем настройки
 
var DB = DBM.CreateDatabase(DBS);//Создаем проект и загружаем БД в память
```

{% endtab %}

{% tab title="Более правильный пример" %}

<pre class="language-csharp"><code class="lang-csharp">//C# 
//Main
static void Main(string[] agrs)
{
<strong> DatabaseManager DBM = new DatabaseManager();//Создание экземпляра DataBaseManager
</strong> 
 var DBS = new DatabaseSettings("Test", "D:\\");//Передаем настройки
 SaveKey(DBS.Key);//Сохраняем ключ
 
 var DB = DBM.CreateDatabase(DBS);//Создаем проект и загружаем БД в память
}

static string LoadKey(){
//Реализация загрузки ключа 
}

static void SaveKey(string Key){
//Реализация сохранения ключа
}
</code></pre>

{% endtab %}
{% endtabs %}

На третьей строке видно создание экземпляра класса настроек. Это быстрый способ сгенерировать базу. Также можно задать более точные настройки, ознакомившись с конструктором этого класса.

* &#x20;   Название проекта.
* &#x20;   Путь, где будет создана папка проекта.
* &#x20;   Ключ для шифровки данных.
* &#x20;   Количество столбцов в базе.
* &#x20;   Количество строк (линий) в одном секторе.

{% hint style="info" %}
Сектор представляет собой файл, в котором хранится определенное количество строк. Рекомендуется не создавать секторы (кластеры) слишком большими, чтобы избежать потери производительности.
{% endhint %}

### Работа с данными в БД

Для добавления данных в базу необходимо вызвать метод `AddData` и передать список данных для добавления:

{% tabs %}
{% tab title="Первый пример" %}

```csharp
DB.AddData("Some person", "18");//name | old
```

{% endtab %}

{% tab title="Второй пример" %}

```csharp
//Пример на основе массива 
DB.AddData(new string[] {"Some person", "18"});
```

{% endtab %}

{% tab title="Третий пример" %}

```csharp
using NASDataBaseAPI.Interfaces;//Для создания IDataLine обьекта 

static void Main(string[] agrs)
{

 //...
 
 var pers = new Person()
 {
     Old = 18,
     Name = "Bob"
 };
 
 DB.AddData(pers);
}

class Person : IDataLine
{
    public int Old;
    public string Name;

    public int ID { get; private set; }

    public string[] GetData()
    {
        return new string[] { Name, Old.ToString() };
    }

    public void Init(int ID, params string[] datas)
    {
        Old = int.Parse(datas[1]);
        Name = datas[0];
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Важно учесть, что данные в списке должны соответствовать количеству столбцов в базе. Также необходимо, чтобы введенные данные совпадали по типу с данными, хранящимися в отдельных столбцах (см. устройство [Column](/nasdatabase/vspomogatelnyi-instrumentarii/column.md)).
{% endhint %}

Для удаления данных достаточно вызвать метод `RemoveDataByID`. Он принимает номер строки которую необходимо удалить из базы. Для того чтобы узнать номер какого-нибудь элемента в базе можно воспользоваться инструментарием по поиску данных. Либо же более надежным способом, через функционал самого класса `Database`.

```csharp
//Обращаемся к столбцу по номеру 0 ("name") и ищем номер строки с такими данными
int id = DB.GetIDByParams("0", "Some person");
              
//Удаляем всю строку с данными по id
DB.RemoveDataByID(id);
```

Для замены данных на новые следует использовать метод `SetData`, указав ID, где нужно заменить данные, и сами новые данные (список строк):

```csharp
//Заменяем " " на Tom-а, которому 15 лет
DB.SetData(0, "Tom", "15");
```

### Поиск данных

При необходимости поиска данных вам может пригодиться функционал класса `Database`, предоставляющий разнообразные методы, такие как `SmartSearch` и `GetDataByID`. Рассмотрим их использование:\
1\.  `SmartSearch` является инструментом для поиска с большим количеством параметров. Вам нужно передать список столбцов, список типов поиска и список параметров для поиска. Например, чтобы найти все строки в базе данных, где в столбце "name" длина имени пользователя больше 5, вы можете использовать следующий код:

```csharp
BaseLine[] datas = DB.SmartSearch<BaseLine>(new Column[] {new Column("0")},//в 0-м столбце
    new NASDataBaseAPI.Data.SearchType[] {NASDataBaseAPI.Data.SearchType.More},//>
    new string[] {"5"});//больше 5
```

2. `GetDataByID` - получает ID элемента и возвращает список строк по этому запросу.

```csharp
sting[] datas = DB.GetDataByID(id);
```

4. `GetIDByParams` -  возвращает первый найденный ID в указанном столбце, если элемент равен введенному значению. Например:

```csharp
int id = DB.GetIDByParams("0", "Some person");
```

4. `GetAllIDsByParams` - возвращает список всех ID, подходящих под указанные параметры. Если в указанном столбце есть элемент, равный введенному значению, он будет добавлен в общий список и вместе с ним будет возвращен. Например:

```csharp
int[] ids = DB.GetAllIDsByParams("0", "Some person");
```
