Kết nối cơ sở dữ liệu trong javascript

Ai đó có thể cho tôi một số mã nguồn mẫu cho biết cách kết nối với cơ sở dữ liệu SQL Server 2005 từ JavaScript cục bộ không? Tôi đang học lập trình web trên máy tính để bàn của tôi.

Hay tôi cần sử dụng bất kỳ ngôn ngữ kịch bản nào khác? Đề xuất một số lựa chọn thay thế nếu bạn có chúng, nhưng tôi hiện đang cố gắng làm điều đó với JavaScript. Máy chủ SQL của tôi được cài đặt cục bộ trên máy tính để bàn của tôi - SQL Server Management Studio 2005 và trình duyệt IE7.

  • javascript
  • sql server
  • database-connection

256 hữu ích 5 bình luận 679k xem chia sẻ

answer

643

Bạn không nên sử dụng javascript của khách hàng để truy cập cơ sở dữ liệu vì một số lý do [thực tiễn xấu, vấn đề bảo mật, v.v.] nhưng nếu bạn thực sự muốn làm điều này, đây là một ví dụ:

var connection = new ActiveXObject["ADODB.Connection"] ;

var connectionstring="Data Source=;Initial Catalog=;User ID=;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; 

Cách tốt hơn để kết nối với máy chủ sql là sử dụng một số ngôn ngữ phía máy chủ như PHP, Java, .NET, cùng với các ngôn ngữ khác. Khách hàng javascript chỉ nên được sử dụng cho các giao diện.

Và có tin đồn về một truyền thuyết cổ xưa về sự tồn tại của javascript máy chủ, nhưng đây là một câu chuyện khác. ;]

643 hữu ích 5 bình luận chia sẻ

answer

25

Điều này sẽ rất tệ khi thực hiện vì việc chia sẻ chuỗi kết nối của bạn sẽ mở ra trang web của bạn với rất nhiều lỗ hổng mà bạn không thể vá, bạn phải sử dụng một phương pháp khác nếu bạn muốn nó an toàn. Nếu không, bạn đang mở ra một lượng lớn khán giả để tận dụng lợi thế của trang web của bạn.

25 hữu ích 4 bình luận chia sẻ

answer

11

Một mã làm việc hoàn hảo ..

    
    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] + "        "];
        document.write[rs.fields[1] + "        "];
        document.write[rs.fields[2] + "            "];
        document.write[rs.fields[3] + "            "];
        document.write[rs.fields[4] + "
"
]; rs.movenext[]; }

11 hữu ích 0 bình luận chia sẻ

answer

10

Dịch vụ web

SQL 2005+ hỗ trợ các Dịch vụ web gốc mà bạn gần như có thể sử dụng mặc dù tôi không đề xuất nó, vì các rủi ro bảo mật mà bạn có thể gặp phải. Tại sao tôi nói gần như vậy . Javascript không phải là bản địa SOAP, vì vậy sẽ thực sự phức tạp hơn một chút để thực hiện nó. Bạn sẽ phải gửi và nhận SOAP qua XmlHttpRequest. Kiểm tra google cho khách hàng Javascript SOAP.

  • //msdn.microsoft.com/en-us/l Library / ms345123.aspx - Dịch vụ web gốc của SQL
  • //www.google.com/search?q=javascript+soap - Kết quả của Google cho các ứng dụng khách SOAP Javascript

10 hữu ích 0 bình luận chia sẻ

answer

4

Chơi với JavaScript trong HTA Tôi không gặp may với driver={SQL Server};...chuỗi kết nối, nhưng DSN có tên là OK:
Tôi đã thiết lập TestDSN và nó đã kiểm tra OK, sau đó var strConn= "DSN=TestDSN";hoạt động, vì vậy tôi đã tiếp tục thử nghiệm cho mục đích học tập và thử nghiệm nội bộ của mình.

Máy chủ của chúng tôi có một số trường hợp đang chạy, ví dụ như server1 \ devserver1 \ Test , điều này khiến mọi thứ trở nên khó khăn hơn một chút khi tôi đã lãng phí thời gian để quên thoát \như \\:]
Sau một số kết thúc server=server1;instanceName=devtrong chuỗi kết nối, cuối cùng tôi đã nhận được điều này một để làm việc:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

Sử dụng thông tin đăng nhập Windows thay vì cung cấp người dùng / pwd, tôi thấy một trò giải trí thú vị là khám phá sự tinh tế của Integrated Security = truev Integrated Security = SSPIv Trusted_Connection=Yes- xem Sự khác biệt giữa Bảo mật tích hợp = Bảo ​​mật tích hợp và Bảo mật tích hợp = SSPI

Coi chừng RecordCount sẽ quay lại như -1thể sử dụng loại adOpenForwardOnly mặc định . Nếu bạn đang làm việc với các tập kết quả nhỏ và / hoặc không rs.Open[strQuery, objConnection, 3]; bận tâm đến toàn bộ bộ nhớ cùng một lúc, hãy sử dụng [3 = adOpenStatic] và điều này mang lại hiệu lựcrs.RecordCount

4 hữu ích 0 bình luận chia sẻ

answer

4

Như đã nêu trước đây, không nên thực hiện bằng Javascript phía máy khách nhưng có một khung để triển khai những gì bạn muốn một cách an toàn hơn.

Nodejs là một khung cho phép bạn mã hóa các kết nối máy chủ trong javascript, vì vậy hãy xem Nodejs và bạn có thể sẽ tìm hiểu thêm một chút về giao tiếp với cơ sở dữ liệu và lấy dữ liệu bạn cần.

4 hữu ích 0 bình luận chia sẻ

answer

2

. một máy chủ web mini vào máy chủ cơ sở dữ liệu, vì vậy câu trả lời này vẫn là một lộ trình khác mà bạn có thể đi.]

Bạn cũng có thể kết nối trực tiếp bằng cách sử dụng các socket [google "javascript socket"] và trực tiếp tại thời điểm này tôi có nghĩa là sử dụng tệp Flash cho mục đích này, mặc dù HTML5 có Ổ cắm Web như một phần của thông số mà tôi tin rằng bạn cho phép bạn làm điều tương tự.

Một số người trích dẫn các vấn đề bảo mật, nhưng nếu bạn thiết kế quyền cơ sở dữ liệu của mình một cách chính xác, về mặt lý thuyết bạn có thể truy cập cơ sở dữ liệu từ bất kỳ giao diện người dùng nào, bao gồm OSQL và không vi phạm bảo mật. Vấn đề bảo mật sẽ là nếu bạn không kết nối qua SSL.

Tuy nhiên, cuối cùng, tôi khá chắc chắn đây chỉ là lý thuyết vì tôi không tin bất kỳ thư viện JavaScript nào tồn tại để xử lý các giao thức truyền thông cho SSL hoặc SQL Server, vì vậy trừ khi bạn sẵn sàng tự mình tìm ra những điều này. tốt hơn để đi theo con đường có một máy chủ web và ngôn ngữ kịch bản phía máy chủ ở giữa trình duyệt và cơ sở dữ liệu.

2 hữu ích 1 bình luận chia sẻ

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Chủ Đề