ADODB
ADOdb — программная библиотека, обеспечивающая прикладной интерфейс доступа к базам данных.
Создание подключения
Для того, чтобы работать с базой данных, нужно создать подключение. Для этого служит объект ADODB.Connection. ADODB.Connection создается с помощью конструктора ActiveXObject:
var ADODBConnection = new ActiveXObject("ADODB.Connection");
Подробнее об объекте ADODB.Connection можно почитать здесь: https://docs.microsoft.com/ru-ru/sql/ado/reference/ado-api/connection-object-ado?view=sql-server-2017
Теперь можно создать подключение к базе данных:
var ODBCConnectionString = "Driver={SQL Server};Server=" + server_addr + ";Database=" + db_name + ";Trusted_Connection=Yes;";
ADODBConnection.Open(ODBCConnectionString);
server_addr - адрес SQL сервера, а db_name - имя базы данных. Здесь предполагается, что на сервере БД включена Windows-авторизация и учетная запись, из под которой открывается подключение, имеет доступ к базе данных. Если на сервере не Windows авторизация или нужно подключиться не к SQL-серверу, нужно использовать другую строку: https://www.connectionstrings.com/
Подробнее о методе Open можно почитать здесь: https://docs.microsoft.com/ru-ru/sql/ado/reference/ado-api/open-method-ado-connection?view=sql-server-2017
Выполнение запроса
После того, как создано подключение к базе данных, можно выполнить к ней запрос:
var ODBCRecordset = ADODBConnection.Execute(query);
Метод Excecute возвращает набор записей (Recordset). query - строка запроса.
Подробнее о методе Excecute можно почитать здесь: https://docs.microsoft.com/ru-ru/sql/ado/reference/ado-api/execute-method-ado-connection?view=sql-server-2017
Recordset
Грубо говоря, Recordset - это массив строк из БД. В нашем случае, отличие от массива заключается в том, что к запсям в Recordset нельзя обращаться по индексу. Для перебора записей в Recordset используется курсор. Для определения начала и конца Recordset используются параметры BOF и EOF. Когда создается объект Recordset, курсор устанавливается в первую запись, а параметры BOF и EOF устанавливаются в False. Если записей нет, то BOF и EOF устанавливаются в True. Для перебора записей, нужно сдигать курсор, пока EOF не станет равным True.
Подробнее об объекте Recordset можно почитать здесь: https://docs.microsoft.com/ru-ru/sql/ado/reference/ado-api/recordset-object-ado?view=sql-server-2017
Проверка наличия записей в Recordset
С помощью BOF и EOF можно проверить, есть ли в Recordset какие-либо записи:
if(ODBCRecordset.BOF || ODBCRecordset.EOF) {
//Если записей нет, прерываем выполнение функции
return;
}
Перебор записей и получение значений из Recordset
Для перемещения курсора мы будем использовать функции MoveFirst и MoveNext:
//Перемещаем курсор к первой записи
ODBCRecordset.MoveFirst();
//Цикл, в котором перебираются все записи в Recordset
while(!ODBCRecordset.EOF){
/*Здесь мы будем получать значения из записи*/
//Перемещаем курсор к слудующей записи
ODBCRecordset.MoveNext();
}
Для получения значений мы будем использовать коллекцию Fields.
Каждая запись Recordset содержит коллекцию Fields. Коллекция Fields состоит из объектов Field, которые представляют столбцы в Recordset. Чтобы получить все значения из строки, нужно обратиться к каждому Field в Fields и получить значения Name и Value:
var result = new Array(); //После перебора всех записей получим массив объектов, с котороым можно будет нормально работать, а не вот это вот всё
//Перемещаем курсор к первой записи
ODBCRecordset.MoveFirst();
//Цикл, в котором перебираются все записи в Recordset
while(!ODBCRecordset.EOF){
/*Здесь мы будем получать значения из записи*/
var record_obj = new Object(); //Объект, который мы положим в массив result
for(i = 0; i < ODBCRecordset.Fields.Count; i++) {
_name = ODBCRecordset.Fields(i).Name;
_value = ODBCRecordset.Fields(i).Value;
record_obj.SetProperty(_name, _value);
}
result.push(record_obj);
//Перемещаем курсор к слудующей записи
ODBCRecordset.MoveNext();
}
Закрыть соединение
После того, как записи получены, можно закрыть соединение:
ADODBConnection.Close();
Пример функции, которая делает запросы
function SQLQuery(query, db_name, server_addr) {
result = new Array();
ODBCConnectionString = "Driver={SQL Server};Server=" + server_addr + ";Database=" + db_name + ";Trusted_Connection=Yes;";
try {
ADODBConnection = ActiveXObject("ADODB.Connection");
ADODBConnection.Open(ODBCConnectionString);
try {
ODBCRecordset = ADODBConnection.Execute(query);
if(ODBCRecordset.BOF || ODBCRecordset.EOF) {
return result;
}
ODBCRecordset.MoveFirst();
while(!ODBCRecordset.EOF){
record_obj = new Object();
for(i = 0; i < ODBCRecordset.Fields.Count; i++) {
_name = ODBCRecordset.Fields(i).Name;
_value = ODBCRecordset.Fields(i).Value;
record_obj.SetProperty(_name, _value);
}
result.push(record_obj);
ODBCRecordset.MoveNext();
}
} catch (error) {
ADODBConnection.Close()
throw error;
}
ADODBConnection.Close()
} catch (error) {
throw error;
}
return result;
}