Как подключиться к базе данных SQL Server из JavaScript в браузере? - PullRequest
263 голосов
/ 13 мая 2009

Кто-нибудь может дать мне некоторый пример исходного кода, показывающий, как локально подключиться к базе данных SQL Server 2005 из JavaScript? Я изучаю веб-программирование на своем рабочем столе.

Или мне нужно использовать какой-нибудь другой язык сценариев? Предложите несколько альтернатив, если они у вас есть, но сейчас я пытаюсь сделать это с помощью JavaScript. Мой SQL Server локально установлен на моем рабочем столе - SQL Server Management Studio 2005 и браузер IE7.

Ответы [ 8 ]

654 голосов
/ 13 мая 2009

Вы не должны использовать клиентский JavaScript для доступа к базам данных по нескольким причинам (плохая практика, проблемы безопасности и т. Д.), Но если вы действительно хотите это сделать, вот пример:

var connection = new ActiveXObject("ADODB.Connection") ;

var connectionstring="Data Source=<server>;Initial Catalog=<catalog>;User ID=<user>;Password=<password>;Provider=SQLOLEDB";

connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");

rs.Open("SELECT * FROM table", connection);
rs.MoveFirst
while(!rs.eof)
{
   document.write(rs.fields(1));
   rs.movenext;
}

rs.close;
connection.close; 

Лучшим способом подключения к серверу sql было бы использование некоторых серверных языков, таких как PHP, Java, .NET и других. Клиентский javascript должен использоваться только для интерфейсов.

И ходят слухи о древней легенде о существовании серверного javascript, но это уже другая история. ;)

25 голосов
/ 22 августа 2011

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

10 голосов
/ 01 апреля 2014

Идеальный рабочий код ..

    <script>
    var objConnection = new ActiveXObject("adodb.connection");
    var strConn = "driver={sql server};server=QITBLRQIPL030;database=adventureworks;uid=sa;password=12345";
    objConnection.Open(strConn);
    var rs = new ActiveXObject("ADODB.Recordset");
    var strQuery = "SELECT * FROM  Person.Address";
    rs.Open(strQuery, objConnection);
    rs.MoveFirst();
    while (!rs.EOF) {
        document.write(rs.fields(0) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
        document.write(rs.fields(1) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
        document.write(rs.fields(2) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    ");
        document.write(rs.fields(3) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    ");
        document.write(rs.fields(4) + "<br/>");
        rs.movenext();
    }
</script>
10 голосов
/ 13 мая 2009

Веб-сервисы

SQL 2005+ поддерживает нативные веб-сервисы, которые вы можете почти использовать, хотя я бы не советовал этого из-за угроз безопасности, с которыми вы можете столкнуться. Почему я сказал почти . Ну, Javascript не является SOAP-нативным, так что на самом деле было бы немного сложнее сделать это. Вам нужно будет отправить и получить SOAP через XmlHttpRequest. Проверьте Google для клиентов Javascript SOAP.

4 голосов
/ 14 июля 2014

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

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

4 голосов
/ 01 мая 2014

Игра с JavaScript в HTA Мне не повезло с driver={SQL Server};... строкой подключения, но с именованным DSN все было в порядке:
Я настроил TestDSN , и тестирование прошло успешно, а затем var strConn= "DSN=TestDSN"; сработало, поэтому я продолжал экспериментировать для своих внутренних испытаний и обучения.

На нашем сервере запущено несколько экземпляров, например server1 \ dev и server1 \ Test , что немного усложнило ситуацию, так как мне удалось потратить некоторое время, забыв убежать от \ как \\:)
После некоторых тупиков с server=server1;instanceName=dev в строках соединения я в итоге заставил работать этот:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

Используя учетные данные Windows вместо того, чтобы указывать пользователя / pwd, я обнаружил интересное отклонение: обнаружил тонкости Integrated Security = true v Integrated Security = SSPI v Trusted_Connection=Yes - см. Разница между интегрированной безопасностью = True и интегрированной безопасностью = ССПИ

Помните, что RecordCount вернется как -1, если используется тип по умолчанию adOpenForwardOnly . Если вы работаете с небольшими наборами результатов и / или не обращаете внимания на весь объем памяти сразу, используйте rs.Open(strQuery, objConnection, 3); (3 = adOpenStatic) , и это дает действительный rs.RecordCount

2 голосов
/ 13 мая 2009

(извините, это был более общий ответ о бэкэндах SQL - я не читал ответ о функции WebServices в SQL Server 2005. Хотя эта функция все еще работает через HTTP, а не напрямую через сокеты, так что по сути они встроил мини-веб-сервер в сервер базы данных, поэтому этот ответ - еще один путь, по которому вы могли бы пойти.)

Вы также можете подключиться напрямую, используя сокеты (google "javascript sockets"), и под этим непосредственно подразумевается использование файла Flash для этой цели, хотя в HTML5 есть веб-сокеты как часть спецификации, которая, как я считаю, позволит вам то же самое.

Некоторые люди ссылаются на проблемы безопасности, но если вы правильно разработали разрешения для базы данных, вы теоретически должны иметь доступ к базе данных из любого внешнего интерфейса, включая OSQL, и не иметь нарушения безопасности. В этом случае проблема безопасности была бы, если бы вы не подключались через SSL.

Наконец, я уверен, что все это теоретически, потому что я не верю, что существуют какие-либо библиотеки JavaScript для обработки протоколов связи для SSL или SQL Server, поэтому, если вы не захотите сами разобраться с этим было бы лучше пойти по пути между веб-сервером и серверным языком сценариев между браузером и базой данных.

1 голос
/ 13 мая 2009

Я не думаю, что вы можете подключиться к серверу SQL с клиентской стороны JavaScript. Вам нужно выбрать какой-нибудь серверный язык для создания веб-приложений, которые могут взаимодействовать с вашей базой данных, и использовать только javascript для улучшения взаимодействия с вашим пользовательским интерфейсом.

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

  • PHP
  • ASP.Net
  • Ruby On Rails
...