Как подключиться к базе данных SQL Server из JavaScript в браузере?

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

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

Ответ 1

Вы не должны использовать клиентский 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, но это еще одна история.;)

Ответ 2

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

Ответ 3

Веб-службы

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

Ответ 4

Отличный рабочий код.

    <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>

Ответ 5

Играя с 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 - см. Разница между интегрированными Security = True и Integrated Security = SSPI

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

Ответ 6

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

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

Ответ 7

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

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

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

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

Ответ 8

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

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

  • PHP
  • ASP.Net
  • Ruby On Rails