Як підключитися до бази даних SQL Server з JavaScript у браузері?


285

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

Або мені потрібно використовувати будь-яку іншу мову сценаріїв? Запропонуйте кілька альтернатив, якщо у вас є, але я зараз намагаюся зробити це за допомогою JavaScript. Мій SQL Server локально встановлений на моєму робочому столі - SQL Server Management Studio 2005 та браузер IE7.


16
Однозначно не рекомендується робити це, але приємно бачити, які відповіді можуть вийти з цього.
TheTXI

2
Я хочу підключитися до бази даних від Node.JS (реалізація JavaScript на стороні сервера), і я приїхав сюди. Хтось знає, куди я мушу піти на це?
Рой Тінкер

2
@RoyTinker: Є node-postgres і node-mysql.
Янус Троельсен

1
Дійсно, чи є безкоштовна база даних, яку ви можете використовувати?

1
Ви можете написати резервний REST, використовуючи Node.js та JavaScript, і поєднати його з вашим клієнтом JavaScript.
Фес Враста

Відповіді:


701

Вам не слід використовувати 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, але це вже інша історія. ;)


323
Вітаємо, що в основному є єдиною людиною, яка насправді показує, що це можливо (хоча і не рекомендується).
TheTXI

6
Хоча це може працювати на створенні ОП - він сказав, що хоче навчитися "веб-програмуванню" - а Internet Explorer в умовах низької безпеки не є веб-програмуванням.
Квентін

27
Я не розумію, чому цей коментар кваліфікується як негативний голос. Я пояснюю, як це зробити, але кажу йому, щоб він не використовував.
Фабіо Вініцій Біндер

26
fbinder: деякі люди проголосують за це, тому що вони вважають, що будь-яка спроба підключення до бази даних та запитів із JavaScript є великим "ні-ні" (навіть якщо ви це чітко заявляєте). Якби я був ти, я б не заперечував за один чи два негативні голоси, які ти отримуєш за це, і просто насолоджуюся численними голосами, які він отримає завдяки тому, що це єдина відповідь, яка насправді відповідає на поставлене питання.
TheTXI

36
Однак, мабуть, слід зазначити, що ця відповідь, ймовірно, не працюватиме для браузерів, які не входять в IE через використання ActiveX (навіть незважаючи на те, що оригінальний плакат був явним щодо його використання IE).
TheTXI

25

Це було б дуже погано, оскільки спільне використання рядка підключення відкриває ваш веб-сайт настільки багато вразливих місць, що ви не можете просто виконати виправлення, ви повинні використовувати інший метод, якщо хочете, щоб він був захищеним. Інакше ви відкриваєтеся перед величезною аудиторією, щоб скористатися своїм сайтом.


7
Оновлення, тому що ви насправді пояснили, чому це погана ідея
інженер з

поради щодо безпеки більш корисні та важливіші за технічні рішення
saber tabatabaee yazdi

9
Відмовились від голосування, оскільки ОП не запитували, чи це добра чи погана практика, вони запитували як. Ви можете вставити, чому це може бути погана ідея під час фактичного ВІДПОВІДЬ, але просто сказати, що це погана ідея не заслуговує на те, щоб бути її власною відповіддю, це найкращий коментар.
воблери

1
Що робити, якщо ви просто пишете щось за захищеним брандмауером для взаємодії з локальним сервером, це все-таки погано?
Брайан Брайс

Виправте мене, якщо я помиляюся, але якщо наданий користувачем доступ лише для читання, і ви керуєте, до яких таблиць вони можуть отримати доступ, це технічно безпечно, поки щось не зміниться, ні? Я б не радив тому, якщо весь БД не містив невідчутну інформацію. Неможливо розмістити конфіденційну інформацію в іншій БД. Я можу уявити, що це корисно для статичного веб-сайту без делікатної інформації. Якщо потрібен auth, можна використовувати asanc oautj2 на іншому сервері.
Джо Флак

11

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

    <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

Веб-сервіси

SQL 2005+ підтримує вбудовані веб-сервіси, які ви майже можете використовувати, хоча я б не пропонував це через ризики для безпеки, з якими ви можете зіткнутися. Чому я майже сказав . Ну, Javascript не є SOAP рідним, тому було б трохи складніше насправді зробити це. Вам доведеться надсилати та отримувати SOAP через XmlHttpRequest. Перевірте google на наявність клієнтів Javascript SOAP.


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 = truev Integrated Security = SSPIv Trusted_Connection=Yes- див. Різниця між інтегрованою безпекою = True та інтегрованою безпекою = SSPI

Остерігайтеся, що RecordCount повернеться так, -1ніби використовуючи тип adOpenForwardOnly за замовчуванням . Якщо ви працюєте з невеликими наборами результатів і / або не заперечуєте одразу всього партії в пам'яті, використовуйте rs.Open(strQuery, objConnection, 3); (3 = adOpenStatic), і це дає дійсне значенняrs.RecordCount


4

Як було сказано раніше, це не слід робити за допомогою клієнтського Javascript, але є рамки для більш безпечної реалізації того, що ви хочете.

Nodejs - це структура, яка дозволяє кодувати підключення до сервера в JavaScript, тому загляньте в Nodejs, і ви, мабуть, дізнаєтесь трохи більше про спілкування з базами даних та захоплення необхідних даних.


3

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

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

Деякі люди цитують проблеми безпеки, але якщо ви правильно розробили дозволи бази даних, теоретично ви повинні мати доступ до бази даних з будь-якого переднього кінця, включаючи OSQL, і не мати порушення безпеки. Проблема безпеки, таким чином, буде, якщо ви не підключалися через SSL.

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


2
Добре сказано. Немає нічого поганого в доступі до бази даних безпосередньо від клієнта (тобто кожного товстого клієнта, який коли-небудь робився), а не через веб-сервіс. Якщо ви використовуєте автентифікацію Windows та хороший рівень захисту, то тут нічого не так
Nick.McDermaid

1

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

ви можете підібрати будь-яку мову сценарію на стороні сервера на основі ваших мовних переваг:

  • PHP
  • ASP.Net
  • Рубін на рейках

1
Це була одна з єдиних правдивих відповідей, яку я міг знайти. Які варіанти ASP.net я повинен досліджувати? Що ще крім драйверів для мікрософт потрібно мені?
Rachael

ви потенційно можете використовувати ADO.Net або Entity Framework / LinqToSql - фактично будь-яке з них.
Вікрам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.