ChatGPT解决这个技术问题 Extra ChatGPT

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.

Definitely not recommended that you do this, but it is nice to see what answers may come out of it.
I'm looking to connect to a database from Node.JS (implementation of Server-side javascript) and I arrived here. Anyone know where I should go for that?
@RoyTinker: There's node-postgres and node-mysql.
Actual is there a free database that you can use?
You could write a REST backend using Node.js and JavaScript and interface it with you client side JavaScript.

F
Fabio Vinicius Binder

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:

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; 

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. ;)


Congratulations on being pretty much the only person here who actually shows that it is possible (although not recommended).
While this could work on the OP's set up - he did say he wanted to learn "web programming" - and Internet Explorer in a low security environment is not web programming.
I don´t understand why this comment qualifies as a negative vote. I explain how to do it but tell him to not use it.
fbinder: some people will vote this down because they think that any attempt at database connectivity and querying from JavaScript is a big no-no (even though you state that pretty clearly). If I were you, I wouldn't mind the one or two negative votes you get on this and just enjoy the numerous up votes it will receive due to it being the only answer that actually answers the question posed.
It should probably be noted, however, that this answer will probably not work for non-IE browsers due to the use of ActiveX (even though the original poster was explicit about his use of IE).
K
Kev

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.


Upvote because you actually explained why it's a bad idea
security tips more usable and important than technical solutions
Down vote because the OP didn't ask if it was good or bad practice, they asked how. You can insert why it may be a bad idea along an actual ANSWER, but just saying it is a bad idea doesn't deserve to be its own answer, it's a comment at best.
What if you're just writing something behind a secure firewall to interface with an on premises server, is this still bad?
Why do you have to share your connection string ? What if we are on a private network (typically intranet) and the connection string is typed in by a handfull of trusted users ? Don't leave the connection string in the source code.
U
Uthaiah

A perfect working code..

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

R
Robert Koritnik

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.

http://msdn.microsoft.com/en-us/library/ms345123.aspx - SQL native WebServices

http://www.google.com/search?q=javascript+soap - Google results for Javascript SOAP clients


C
Community

Playing with JavaScript in an HTA I had no luck with a driver={SQL Server};... 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. server1\dev and server1\Test 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= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

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


V
Vikram

I dont think you can connect to SQL server from client side javascripts. You need to pick up some server side language to build web applications which can interact with your database and use javascript only to make your user interface better to interact with.

you can pick up any server side scripting language based on your language preference :

PHP

ASP.Net

Ruby On Rails


This was one of the only true answers I could find. What ASP.net options should I be investigating? What more in addition to microsoft drivers do I need?
you could potentially use ADO.Net or Entity Framework / LinqToSql - any of these actually.
K
Kev

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


Well said. There is nothing wrong with accessing a database directly from a client (i.e. every thick client ever made) and not through a web service. If you use windows authentication and a good security layer there is nothin wrong with this
S
Shiri

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.