ブラウザでJavaScriptからSQL Serverデータベースに接続する方法は?


285

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

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


16
これを行うことは絶対にお勧めしませんが、どのような答えが出てくるかを確認するのは良いことです。
TheTXI 2009年

2
Node.JS(Server-side javascriptの実装)からデータベースに接続しようと思って、ここに到着しました。誰がどこに行けばいいのか知っていますか?
ロイティンカー、

2
@RoyTinker:node-postgresとnode-mysqlがあります。
Janus Troelsen、2012年

1
実際に使える無料のデータベースはありますか?

1
Node.jsとJavaScriptを使用してRESTバックエンドを記述し、それをクライアント側のJavaScriptとインターフェースすることができます。
Fez Vrasta

回答:


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

6
これはOPのセットアップで機能する可能性がありますが、「Webプログラミング」を学びたいと言っていました。低セキュリティ環境のInternet ExplorerはWebプログラミングではありません。
クエンティン

27
なぜこのコメントが反対票とみなされるのか理解できません。私はそれを行う方法を説明しますが、それを使用しないように彼に言います。
Fabio Viniciusバインダー

26
fbinder:データベース接続とJavaScriptからのクエリでの試みは(あなたがそれをかなり明確に述べていたとしても)非常に難しいと思うので、一部の人々はこれに反対票を投じます。もし私があなただったら、私はあなたがこれで得た1票か2票の否定票を気にせず、提起された質問に実際に答える唯一の答えであるため、それが受け取る多数の賛成票を楽しむだけです。
TheTXI 2009年

36
ただし、ActiveXを使用しているため、IE以外のブラウザではこの回答はおそらく機能しないことに注意してください(元の投稿者がIEの使用について明確に示していたとしても)。
TheTXI 2009年

25

接続文字列を共有するとWebサイトが非常に多くの脆弱性にさらされるため、単純にパッチを適用できないため、これを行うのは本当に悪いことです。安全を確保するには、別の方法を使用する必要があります。そうでなければ、あなたはあなたのサイトを利用するために巨大な聴衆に開放しています。


7
あなたが実際にそれが悪い考えである理由を実際に説明したので賛成票を投じてください
エンジニア

テクニカルソリューションよりも
使いやすく

9
OPがそれが良いか悪いかを尋ねなかったため、反対票を投じました。実際の回答に沿って、それが悪いアイデアである理由を挿入することができますが、悪いアイデアであると言っただけでは、それ自体の答えに値するものではなく、せいぜいコメントです。
Wobbles

1
オンプレミスサーバーとのインターフェイスを確保するために、セキュリティで保護されたファイアウォールの背後に何かを記述しているだけの場合、これはまだ悪いのでしょうか。
ブライアンブライス

私が間違っている場合は修正してください。ただし、提供されたユーザーが読み取り専用であり、ユーザーがアクセスできるテーブルを管理している場合、何かが変更されるまで技術的に安全です。DB全体に機密性の低い情報が含まれていない限り、私はどちらにも助言しません。機密情報を別のDBに置くことができます。これは機密情報のない静的なWebサイトに役立つと想像できます。認証が必要な場合は、別のサーバーでoautj2 asyncを使用できます。
Joe Flack、

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+は、セキュリティリスクに直面する可能性があるため、お勧めしませんが、ほとんど使用できるネイティブWebサービスをサポートしています。どうしてほとんどと言ったのか。JavascriptはSOAPネイティブではないため、実際に作成するのは少し複雑になります。経由でSOAPを送受信する必要がありますXmlHttpRequest。Javascript SOAPクライアントについては、Googleを確認してください。


5

HTAでJavaScriptを使用してdriver={SQL Server};...接続文字列を試してもうまくいきませんでしたが、名前付きDSNは問題ありませんでし
。TestDSNを設定し、それが問題なくテストされて機能したvar strConn= "DSN=TestDSN";ため、社内のテストと学習のために実験を続けました。

当社のサーバが実行中の複数のインスタンスを持っている、例えばSERVER1 \ DEVSERVER1 \テスト私は脱出を忘れいくつかの時間を無駄にするために管理して物事は少しトリッキー作ら\として\\:)
といくつかの行き止まりの後server=server1;instanceName=dev、接続文字列で、私は最終的に得た、これを働く人:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

ユーザー/パスワードを提供するのではなく、Windows資格情報を使用して、興味深い転換が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バックエンドに関するより一般的な回答でした-SQL Server 2005のWebServices機能に関する回答はまだ読んでいませんでした。ミニWebサーバーをデータベースサーバーに接続するので、この答えはさらに別のルートになります。)

ソケット(google "javascript sockets")を使用して直接接続することもできます。この時点で直接この目的でFlashファイルを使用することもできますが、HTML5には仕様の一部としてWebソケットがあり、同じことを実行できると思います。

一部の人々はセキュリティの問題を挙げていますが、データベースのアクセス許可を正しく設計した場合、理論的にはOSQLを含む任意のフロントエンドからデータベースにアクセスでき、セキュリティ違反はないはずです。したがって、セキュリティの問題は、SSL経由で接続していない場合です。

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


2
よく言った。Webサービスを介さずに、クライアント(つまり、これまでに作成されたすべてのシッククライアント)から直接データベースにアクセスすることに問題はありません。Windows認証と適切なセキュリティ層を使用している場合、これに問題はありません
Nick.McDermaid

1

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

言語設定に基づいて、サーバー側のスクリプト言語を選択できます。

  • PHP
  • ASP.Net
  • Ruby on Rails

1
これは私が見つけた唯一の真の答えの1つでした。どのASP.netオプションを調査する必要がありますか?Microsoftドライバーの他に何が必要ですか?
レイチェル2014年

潜在的にADO.NetまたはEntity Framework / LinqToSqlを使用する可能性があります-これらのいずれかです。
Vikram 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.