Bazaprogram.ru

Новости из мира ПК
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Javascript работа с ms sql

SQL Server и JavaScript

21.05.2012, 20:31

Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS SQL Server?
ВОПРОС: Как настроить MS SQL Server, чтобы через Access, можно было редактировать таблицы MS.

21.05.2012, 21:552

1. форму на сервер в php-(perl-, asp-. )программу отправлять умеете? да/нет?

2. в php-(perl-, asp-. )программе разбирать полученные данные формы умеете? да/нет?

3. из php-(perl-, asp-. )программы заносить данные в mysql умеете? да/нет?

если везде ответите ‘да’, то проблем с объяснением ajax-технологии не будет.
ибо ajax — это всего лишь ‘модификация’ (разновидность) отправки данных на сервер:
вместо сабмита формы точно такие же данные в точно таком же виде уходят на сервер,
но в фоновом режиме.

ну а ежели хоть что-то из трёх перечисленных пунктов не умеете. то, увы.
тогда объяснять что-либо вам — это только время зря терять.

22.05.2012, 10:04 [ТС]322.05.2012, 17:154

ну раз всё умеете, то тогда читайте:

1. форма при сабмите (любым методом — get или post — неважно) формирует ‘строку’ вида:
имя первого элемента формы = значение первого элемента формы & имя второго элемента формы = значение второго элемента формы &.
и отправляет эту ‘строку’ серверной программе на php (perl, asp. )
формирует форма при сабмите эту строку сама, автоматически
и форме для этого обязательно нужен хотя бы один поименованный элемент формы (из которого она и возьмёт name и value)

при использовании ajax-технологии аналогичную строку вам надо сформировать самому, при помощи javascripta,
методом конкатенации переменных (или строк символов).
никаких элементов формы вообще не надо — ни с именами, ни без имен, да и сами теги не нужны.
просто берёте со страницы то, что вам надо и сами ‘собираете’ это в ‘строку’.
не нужны в принципе никакие name, никакие амперсанды, никакие символы равенства.
можете собрать строку такого вида:

повторяю главные тезисы — отличие ajax от сабмита формы:
a) при использовании ajax формы (тегов ), как обязательное условие, иметь не надо;
b) при использовании ajax поименованных элементов формы, как обязательное условие, иметь не надо;
c) при использовании ajax отправляемая вами на сервер строка может быть любого удобного для вас вида.

* один маленький нюанс: форма, когда ‘собирает строку’, все её не-ASCII-символы (типа кириллических)
автоматически сама переводит в нужный вид — декодирует.
при использовании ajax кодирование придётся делать самому.
что очень просто — пишем не var first = ‘мама’; , а var first = encodeURIComponent ( ‘мама’ ) ;

до сих пор всё понятно? да/нет?
——

2) отправка данных формы (в виде некоторой ‘строки символов’) происходит при её сабмите,
для чего надо или нажать на кнопку сабмита, либо программно просабмитить форму form.submit ();

при использовании ajax ничего сабмитить не надо.
отправка ‘строки символов’ на сервер может произойти по любому нужному нам событию.
например, делаем функцию

Javascript

— надо, чтобы ‘строка символов’ на сервер отправилась по загрузке окна —
пишем onload = myAJAXfunc;
— надо, чтобы ‘строка символов’ на сервер отправилась по клику на ссылке —
пишем link
— надо, чтобы ‘строка символов’ на сервер отправилась при вводе символа в текстовое поле —
пишем
— и так далее. в общем, где угодно, как угодно и когда угодно.

видите, сколько преимуществ у ajax-технологии супротив отправки с помощью формы?
здесь тоже всё понятно? да/нет?
——

3) при отправке строки символов на сервер с помощью формы требуется обязательно ещё и окно,
куда загрузится серверный файл (на php, на perl, на asp. ), который указан в атрибуте action тега

How to connect to SQL Server database from JavaScript in the browser?

Can anybody give me some sample source code showing how to connect to a SQL Server 2005 database from JavaScript locally? I am learning web programming on my desktop.

Or do I need to use any other scripting language? Suggest some alternatives if you have them, but I am now trying to do it with JavaScript. My SQL Server is locally installed on my desktop — SQL Server Management Studio 2005 and IE7 browser.

8 Answers 8

You shouldn´t use client javascript to access databases for several reasons (bad practice, security issues, etc) but if you really want to do this, here is an example:

A better way to connect to a sql server would be to use some server side language like PHP, Java, .NET, among others. Client javascript should be used only for the interfaces.

And there are rumors of an ancient legend about the existence of server javascript, but this is another story. 😉

This would be really bad to do because sharing your connection string opens up your website to so many vulnerabilities that you can’t simply patch up, you have to use a different method if you want it to be secure. Otherwise you are opening up to a huge audience to take advantage of your site.

A perfect working code..

Web services

SQL 2005+ supports native WebServices that you could almost use although I wouldn’t suggest it, because of security risks you may face. Why did I say almost. Well Javascript is not SOAP native, so it would be a bit more complicated to actually make it. You’d have to send and receive SOAP via XmlHttpRequest . Check google for Javascript SOAP clients.

Playing with JavaScript in an HTA I had no luck with a driver=;. connection string, but a named DSN was OK :
I set up TestDSN and it tested OK, and then var strConn= «DSN=TestDSN»; worked, so I carried on experimenting for my in-house testing and learning purposes.

Our server has several instances running, e.g. server1dev and server1Test which made things slightly more tricky as I managed to waste some time forgetting to escape the as \ 🙂
After some dead-ends with server=server1;instanceName=dev in the connection strings, I eventually got this one to work :
var strConn= «Prov >

Using Windows credentials rather than supplying a user/pwd, I found an interesting diversion was discovering the subtleties of Integrated Security = true v Integrated Security = SSPI v Trusted_Connection=Yes — see Difference between Integrated Security = True and Integrated Security = SSPI

Beware that RecordCount will come back as -1 if using the default adOpenForwardOnly type. If you’re working with small result sets and/or don’t mind the whole lot in memory at once, use rs.Open(strQuery, objConnection, 3); (3=adOpenStatic) and this gives a valid rs.RecordCount

As stated before it shouldn’t be done using client side Javascript but there’s a framework for implementing what you want more securely.

Nodejs is a framework that allows you to code server connections in javascript so have a look into Nodejs and you’ll probably learn a bit more about communicating with databases and grabbing data you need.

(sorry, this was a more generic answer about SQL backends—I hadn’t read the answer about SQL Server 2005’s WebServices feature. Although, this feature is still run over HTTP rather than more directly via sockets, so essentially they’ve built a mini web server into the database server, so this answer is still another route you could take.)

You can also connect directly using sockets (google «javascript sockets») and by directly at this point I mean using a Flash file for this purpose, although HTML5 has Web Sockets as part of the spec which I believe let you do the same thing.

Some people cite security issues, but if you designed your database permissions correctly you should theoretically be able to access the database from any front end, including OSQL, and not have a security breach. The security issue, then, would be if you weren’t connecting via SSL.

Finally, though, I’m pretty sure this is all theoretical because I don’t believe any JavaScript libraries exist for handling the communications protocols for SSL or SQL Server, so unless you’re willing to figure these things out yourself it’d be better to go the route of having a web server and server-side scripting language in between the browser and the database.

Работа с базами данных

Node Hero: Глава 5

Перевод книги Node Hero от RisingStack . Переведено с разрешения правообладателей.

В следующей главе я покажу вам, как вы можете настроить приложение Node.js для работы с базой данных и научу вас основам её использования.

Хранение данных в глобальной переменной

Раздача статических страниц пользователям (о чём вы узнали в предыдущей главе) может быть подходящим вариантом для лэндингов или для личных блогов. Однако, если вы хотите отдавать персонализированный контент, вам придётся где-то хранить данные.

Возьмём простой пример: регистрация пользователя. Вы можете отдавать пользовательский контент для отдельных пользователей или сделать его доступным для них только после идентификации.

Если пользователь хочет зарегистрироваться в вашем приложении, вы можете создать обработчик соответствующего роута, чтобы сделать регистрацию возможной:

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

Использование этого метода может быть проблематичным по нескольким причинам:

  • оперативная память дорогая
  • память очищается каждый раз, когда вы перезапускаете ваше приложение
  • если вы не будете чистить память, иногда вы можете получить переполнение памяти

Хранение данных в файле

Следующее решение, которое может прийти вам в голову, это хранить данные в файлах.

Если мы постоянно сохраняем наши пользовательские данные в файловой системе, мы можем избежать ранее перечисленных проблем.

На практике этот метод выглядит следующим образом:

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

К сожалению, хранение пользовательских данных таким образом все ещё имеет несколько недостатков:

  • добавление данных работает неплохо, но подумайте об обновлении или удалении
  • если мы работаем с файлами, нет простого решения для параллельного доступа к ним (системные блокировки не позволят вам писать в один файл параллельно)
  • когда мы пытаемся масштабировать наше приложение, мы не можем разделить файлы между серверами (на самом деле можем, но это далеко за пределами уровня этого руководства)

Здесь выходят на сцену настоящие базы данных.

Возможно, вы уже слышали, что существуют два основных типа баз данных: SQL и NoSQL.

Начнём с SQL. Это язык запросов, предназначенный для работы с реляционными базами данных. SQL немного отличается в зависимости от продукта, который вы используете, но базовые вещи в них тождественны.

Сами данные хранятся в таблицах. Каждая добавленная часть будет представлена в виде строки в таблице, как в Google Sheets или Microsoft Excel.

В базе данных SQL вы можете определить схемы. Они предоставят скелет для данных, которые вы собираетесь разместить. Также, перед тем, как сохранить данные, будет необходимо задать типы различных значений. Например, вам нужно будет определить таблицу для ваших пользовательских данных и сообщить базе данных, что у неё есть имя пользователя, являющееся строкой, и возраст — целый тип.

NoSQL

С другой стороны, в последнее десятилетие стали весьма популярны NoSQL базы данных. С NoSQL вам не нужно определять схему и вы можете хранить любой произвольный JSON. Это хорошо сочетается с JavaScript, потому что мы можем легко превратить любой объект в JSON. Будьте осторожны, потому что вы никогда не можете гарантировать, что данные консистентны, и вы никогда не сможете узнать, какая структура находится в базе данных.

Node.js и MongoDB

Существует распространённое заблуждение о Node.js, которое можно услышать довольно часто:

«Node.js можно использовать только с MongoDB (самая популярная NoSQL база данных)».

По моему опыту, это не так. У большинства баз данных имеются драйверы для Node.js и библиотеки в NPM. По моему мнению, они такие же простые и лёгкие в использовании, как MongoDB.

Node.js и PostgreSQL

Для простоты мы будем использовать SQL в следующем примере. Мой выбор — PostgreSQL.

Чтобы запустить PostgreSQL, вам необходимо установить его на свой компьютер. Если вы используете Mac, вы можете использовать Homebrew для установки PostgreSQL. В противном случае, если вы работаете в Linux, вы можете установить его с помощью своего диспетчера пакетов.

Для получения дополнительной информации ознакомьтесь с этим отличным руководством по началу работы с вашей первой базой данных.

Если вы планируете использовать инструмент для просмотра базы данных, я бы рекомендовал утилиту для командной строки — psql . Она поставляется вместе с сервером PostgreSQL. Вот небольшая инструкция, которая пригодится, если вы начнёте использовать psql .

Если вам не нравится интерфейс командной строки, вы можете использовать pgAdmin, который является инструментом с открытым исходным кодом и предназначен для администрирования PostgreSQL.

Обратите внимание, что SQL — это сам по себе язык программирования. Мы не будем рассматривать все его возможности, а только наиболее простые. Если вам потребуется глубже изучить SQL, то в интернете есть много отличных онлайн-курсов, охватывающих все основы PostgreSQL.

Взаимодействие Node.js с базой данных

Во-первых, мы должны создать базу данных, которую мы будем использовать. Для этого введите следующую команду в терминал: createdb node_hero .

Затем мы должны создать таблицу для наших пользователей.

Наконец, мы можем вернуться к программированию. Вот как вы можете взаимодействовать с вашей базой данных через вашу программу на Node.js:

Это был простой пример — “hello world” в PostgreSQL. Обратите внимание, что первым параметром является строка, которая является нашей SQL-командой, второй параметр представляет собой массив значений, которыми мы хотели бы параметризовать наш запрос.

Большой ошибкой с точки зрения безопасности был бы ввод данных, пришедших от пользователя, в том виде, в котором они были переданы. Приведённая выше функция client.query защищает вас от SQL-инъекций, являющихся распространённым видом атаки, когда злоумышленник пытается внедрить в запрос произвольный SQL-код. Всегда учитывайте это при создании любого приложения, в котором возможен ввод данных со стороны пользователя. Чтобы узнать больше, ознакомьтесь с нашим контрольным списком безопасности Node.js-приложений.

Примечание переводчика: обычно никто не пишет SQL-запросы руками, вместо этого используют так называемые конструкторы запросов (query builder), например sequelize и knex .

Давайте продолжим наш предыдущий пример.

Достижение разблокировано: пользователь сохранён в базе данных! 🙂 Теперь давайте попробуем прочитать эти данные. Затем добавим в наше приложение новый роут для поиска пользователей.

Это было не так сложно, не так ли?

Теперь вы можете запустить любой сложный SQL-запрос, который вы только сможете вообразить, в вашем Node.js-приложении.

С помощью этой техники вы можете постоянно хранить данные в своём приложении, а благодаря трудолюбивой команде разработчиков модуля node-postgres это проще простого.

Работаем с SQL Server в Node.js (с использованием SQL запросов)

Node.Js поддерживает работу со всеми популярными системами управления базами данных. Microsoft SQL Server не исключение.

В репозитории npm существует целый ряд пакетов, которые позволяют работать с этой СУБД. Однако все их можно условно разделить на две большие группы в зависимости от реализуемого подхода.

Непосредственная работа с базой данных c использованием SQL запросов;

Сопоставление объектной модели и структуры базы данных посредство ORM.

В данной статье речь пойдёт о первом подходе.

Установка клиента для SQL Server

Для того чтобы выполнить запрос к базе данных SQL Server в Node. js существует целый ряд библиотек. Мы воспользуемся библиотекой @frangiskos/mssql, которая основана на node-mssql и предоставляет достаточно простой интерфейс для работы.

Библиотека имеет открытый исходный код, который доступен на GitHub (https://github.com/frangiskos/mssql).

Установить её можно при помощи npm следующей командой:

Подключение к базе данных

Чтобы подключиться к базе данных необходимо подключить библиотеку к проекту и создать объект SqlConfig , в котором описаны параметры подключения.

Ниже приведён пример указанных операций:

Далее нужно передать объект SqlConfig в метод init объекта sql.

Если подключение завершено успешно, можно выполнять запросы к базе данных при помощи метода query, но о нём позже.

Так как метод init ничего не возвращает, обработать ошибку подключения можно только при помощи блока try-catch.

Запрос на выборку

Запрос на выборку данных выполняется при помощи метода query/ Этот метод обычно принимает как минимум один параметр – строку с текстом запроса. Остальное — параметры запроса (о них мы поговорим позже).

Ниже показан пример, получения всех записей из таблицы:

Метод query возвращает Promise. Поэтому данные мы можем получить только в методе then или при помощи async/await.

Записи из таблицы возвращаются в виде JSON массива, где каждый элемент представляет собой JSON объект с полями соответствующими структуре таблицы.

Например, для таблицы, которая включает поля id (целое число) и testValue (nvarchar), массив с результатами будет выглядеть приблизительно так:

Запрос без выборки данных

Если запрос не предполагает получения данных из базы ( UPDATE, INSERT, CREATE и т. д.), он выполняется аналогичным образом. Единственное отличие состоит только в том, что в этом случае нет необходимости обрабатывать возвращаемые данные в приложении. Поэтому, метод then можно использовать только для контроля успешного выполнения запроса.

Ниже показан пример запроса на выполнение хранимой процедуры:

Как мы видим при помощи библиотеки @frangiskos/mssql можно спокойно работать с SQL Server используя синтаксис Transact-SQL.

Значение входного параметра хранимой процедуры передаётся непосредственно в строке запроса, что чревато далеко идущими последствиями. Поэтому настоятельно рекомендуется в подобных случаях применять запросы с параметрами (параметрические запросы), речь о которых пойдёт ниже.

Параметрический запрос

Библиотека @frangiskos/mssql поддерживает параметрические запросы.

Для этой цели предусмотрен специальный синтаксис.

Параметры в тексте запроса обозначаются как @P и далее номер параметра (обязательно), начиная с 1.

Обратите внимание, что подобные имена параметров являются заерезервированными.

Значения параметров запроса передаются как параметры метода query ( начиная со второго параметра, первый всегда строка запроса).

Далее представлен предыдущий пример, который был изменён для использования параметрического запроса.

Метод query, ранее принимавший только один параметр, теперь принимает два. Строку запроса и значение параметра.

Количество используемых параметров не ограничено.

Сопоставление параметров запроса их значениям осуществляется слева направо. То есть, второй параметр метода query — @P1, третий — @P2, четвёртый — @P3 и т. д.

Например, такой запрос к рассмотренной ранее тестовой таблице вернёт не все пять значений, а только два.

Результат будет уже таким:

Специализированные методы

В принципе, изложенное выше, это всё, что необходимо знать для успешной работы с SQL Server в Node.js при помощи @frangiskos/mssql. Но, возможности библиотеки этим не ограничиваются.

Есть ещё два метода, которые вызываются аналогично query, но предназначены для частных случаев и потому используются значительно реже. Однако эти методы могут существенно упростить вам работу.

Первый из них queryOne — полный аналог query, но возвращает только первую из выбранных записей. Этот метод избавляет от необходимости использовать « TOP 1» в SQL запросах.

Второй insertReturn >Promise. Поэтому, значение идентификатора доступно только в методе then или с использованием async/await.

Но, даже несмотря на это роль метода insertReturnIdentity переоценить сложно, так как благодаря ему полностью отпадает потребность поиска только, что добавленной записи.

Также стоит обратить внимание на методы q, q1 и ii.

Эти методы по сути являются псевдонимами для query, queryOne и insertReturnIdentity соответственно. Они позволяют сократить объём кода за счёт краткости. Но, стоит ли приносить качество кода в жертву подобной «оптимизации» уже решать вам.

На этом, мы завершаем рассмотрение библиотеки @frangiskos/ mssq l .

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

Читать еще:  Java lang number
Ссылка на основную публикацию
Adblock
detector
Javascript