web-dev-qa-db-ja.com

ブラウザでJavaScriptからSQL Serverデータベースに接続するにはどうすればいいですか?

JavaScriptからローカルでSQL Server 2005データベースに接続する方法を示すサンプルソースコードを誰かにもらえますか。デスクトップでWebプログラミングを学んでいます。

それとも他のスクリプト言語を使用する必要がありますか?あなたがそれらを持っているならいくつかの代替案を提案しなさい、しかし私は今JavaScriptでそれをやろうとしています。私のSQL Serverは私のデスクトップ - SQL Server Management Studio 2005およびIE7ブラウザ - にローカルにインストールされています。

259
Enjoy coding

いくつかの理由(悪い習慣、セキュリティの問題など)でデータベースにアクセスするためにクライアントの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の存在についての古代の伝説の噂がありますが、これはまた別の話です。 ;)

648

あなたの接続文字列を共有することはあなたが単純にパッチを当てることができないほど多くの脆弱性にあなたのウェブサイトを開くのであなたがそれを安全にしたいなら別の方法を使わなければなりません。さもなければあなたはあなたのサイトを利用するために巨大な聴衆に開放しています。

25
allen walker

完璧な作業コード.

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

ウェブサービス

SQL 2005+は、あなたが直面するかもしれないセキュリティ上の危険のために、私はそれをお勧めしませんが ほぼ 使用できるネイティブWebサービスをサポートします。なぜ私は ほとんど と言ったのですか。 JavascriptはSOAPネイティブではないので、実際に作成するのは少し複雑になります。 XmlHttpRequestを介してSOAPを送受信する必要があります。 Javascript SOAPクライアントについては、Googleで確認してください。

10
Robert Koritnik

HTAでJavaScriptを使って遊ぶ私はdriver={SQL Server};...接続文字列でうまくいっていませんでしたが、名前付きDSNは問題ありませんでした。
私はTestDSNを設定し、それがOKをテストし、そして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;"

User/pwdを提供するのではなく、Windows資格情報を使用して、私は興味深い転換がIntegrated Security = true v Integrated Security = SSPI v Trusted_Connection=Yesの微妙な部分を発見することに気付いた 統合セキュリティ= Trueと統合セキュリティ= SSPIの違い

デフォルトのadOpenForwardOnlyタイプを使用する場合、RecordCountは-1として返されることに注意してください。小さな結果セットを扱っていたり、一度に全部のメモリを気にしないのであれば、rs.Open(strQuery, objConnection, 3);(3 = adOpenStatic)を使用すると有効なrs.RecordCountが得られます。

4
AjV Jsy

前述のように、クライアントサイドのJavascriptを使用して行うべきではありませんが、より安全に必要なものを実装するためのフレームワークがあります。

Nodejsは、javascriptでサーバー接続をコーディングできるようにするためのフレームワークです。したがって、Nodejsを調べれば、データベースとの通信および必要なデータの取得についてもう少し学ぶことができるでしょう。

4
Shiri

(申し訳ありませんが、これはSQLバックエンドに関するより一般的な回答でした。SQLServer 2005のWebServices機能に関する回答はまだ読んでいません。ただし、この機能はソケット経由ではなくHTTP経由で実行されるためミニWebサーバーをデータベースサーバーに接続するので、この回答は、もう1つの方法です。

また、ソケット(google "javascript sockets")を使用して直接接続することもできます。この時点で直接接続することもできます。HTML5にはWeb Socketsがあるので、同じことができます。

セキュリティの問題を指摘する人もいますが、データベースのアクセス権を正しく設計していれば、理論的にはOSQLを含むあらゆるフロントエンドからデータベースにアクセスでき、セキュリティの侵害はないはずです。セキュリティ上の問題は、あなたがSSL経由で接続していなかった場合です。

しかし、最後に、SSLやSQL Serverの通信プロトコルを処理するためのJavaScriptライブラリは存在しないと考えられるため、これがすべて理論的であると確信しています。 Webサーバーとサーバーサイドのスクリプト言語をブラウザとデータベースの間に配置することをお勧めします。

2
Kev

クライアントサイドのJavaScriptからSQLサーバーに接続できるとは思わない。データベースとやり取りできるWebアプリケーションを構築し、ユーザーインターフェースとやり取りしやすくするためにのみJavaScriptを使用するには、サーバー側の言語を選択する必要があります。

言語の好みに応じて、サーバーサイドのスクリプト言語を選択できます。

  • PHP
  • ASP.Net
  • Ruby on Rails
1
Vikram