Tarayıcıdaki JavaScript'ten SQL Server veritabanına nasıl bağlanır?


285

Herkes bana yerel olarak JavaScript'ten bir SQL Server 2005 veritabanına bağlanmak gösteren bazı örnek kaynak kodu verebilir? Masaüstümde web programlamayı öğreniyorum.

Yoksa başka bir komut dosyası dili kullanmam gerekiyor mu? Bunlara sahipseniz bazı alternatifler önerin, ancak şimdi JavaScript ile yapmaya çalışıyorum. SQL Server'ım yerel olarak masaüstümde yüklü - SQL Server Management Studio 2005 ve IE7 tarayıcı.


16
Bunu yapmanız kesinlikle tavsiye edilmez, ancak hangi cevapların çıkabileceğini görmek güzeldir.
TheTXI

2
Node.JS (Sunucu tarafı javascript uygulanması) bir veritabanına bağlanmak için arıyorum ve buraya geldi. Bunun için nereye gitmem gerektiğini bilen var mı?
Roy Tinker

2
@RoyTinker: Düğüm-postgres ve düğüm-mysql var.
Janus Troelsen

1
Kullanabileceğiniz ücretsiz bir veritabanı var mı?

1
Node.js ve JavaScript kullanarak bir REST arka ucu yazabilir ve bunu istemci tarafı JavaScript ile arayüzleyebilirsiniz.
Fez Vrasta

Yanıtlar:


701

Çeşitli nedenlerle (kötü uygulama, güvenlik sorunları, vb.) Veritabanlarına erişmek için istemci javascript kullanmamalısınız, ancak bunu gerçekten yapmak istiyorsanız, işte size bir örnek:

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; 

Bir sql sunucusuna bağlanmanın daha iyi bir yolu, PHP, Java, .NET gibi bazı sunucu tarafı dillerini kullanmaktır. İstemci javascript'i yalnızca arabirimler için kullanılmalıdır.

Sunucu javascriptinin varlığı hakkında eski bir efsanenin söylentileri var, ama bu başka bir hikaye. ;)


323
Burada mümkün olduğunu gösteren tek kişi olduğu için tebrikler (tavsiye edilmese de).
TheTXI

6
Bu OP kurulumu üzerinde çalışabilirken - "web programlama" öğrenmek istediğini söyledi - ve düşük güvenlik ortamında Internet Explorer web programlama değildir.
Quentin

27
Bu yorumun neden olumsuz oy olarak nitelendirildiğini anlamıyorum. Nasıl yapılacağını açıklıyorum ama kullanmamasını söylüyorum.
Fabio Vinicius Binder

26
fbinder: Bazı insanlar bunu oylayacak çünkü veritabanı bağlantısı ve JavaScript'ten sorgulama girişimlerinin büyük bir hayır olduğunu düşünüyorlar (bunu açıkça belirtmiş olsanız bile). Ben olsaydım, bu konuda aldığınız bir veya iki olumsuz oyu önemsemem ve sadece ortaya çıkan soruyu cevaplayan tek cevap olması nedeniyle alacağı çok sayıda oyun tadını çıkarmam.
TheTXI

36
Bununla birlikte, bu cevabın ActiveX kullanımı nedeniyle IE olmayan tarayıcılar için muhtemelen işe yaramayacağına dikkat edilmelidir (orijinal poster IE kullanımı hakkında açık olsa da).
TheTXI

25

Bunu yapmak gerçekten kötü olurdu çünkü bağlantı dizenizi paylaşmak, web sitenizi basitçe yamalayamayacağınız pek çok güvenlik açığına açar, güvenli olmasını istiyorsanız farklı bir yöntem kullanmanız gerekir. Aksi takdirde, sitenizden yararlanmak için büyük bir kitleye açılırsınız.


7
Olumlu oy çünkü neden kötü bir fikir olduğunu açıkladınız
Reversed Engineer

güvenlik ipuçları teknik çözümlerden daha kullanışlı ve önemli
sabre tabatabaee yazdi

9
Aşağı oy, OP'nin iyi veya kötü bir uygulama olup olmadığını sormadığı için nasıl olduğunu sordular. Gerçek bir CEVAP boyunca neden kötü bir fikir olabileceğini ekleyebilirsiniz, ancak bunun kötü bir fikir olduğunu söylemek kendi cevabı olmayı hak etmiyor, en iyi yorum.
17'de Wobbles

1
Yalnızca bir şirket içi sunucuyla arabirim oluşturmak için güvenli bir güvenlik duvarının arkasına bir şey yazıyorsanız, bu hala kötü mü?
Bryan Bryce

Yanılıyorsam beni düzeltin, ancak sağlanan kullanıcı salt okunursa ve hangi tablolara erişebileceklerini yönetirseniz, bir şey değişene kadar teknik olarak güvenlidir, değil mi? Tüm DB hassas olmayan bilgi içermiyorsa tho ya da tavsiye etmem. Hassas bilgiler başka bir DB'ye yerleştirilebilir. Bunun hassas bilgi içermeyen statik bir web sitesi için yararlı olduğunu hayal edebiliyorum. Yetkilendirmeye ihtiyaç duyarsanız, başka bir sunucuda oautj2 zaman uyumsuzluğunu kullanabilir.
Joe Flack

11

Mükemmel bir çalışma kodu ..

    <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

Ağ hizmetleri

SQL 2005+ , karşılaşabileceğiniz güvenlik riskleri nedeniyle, önermediğim halde neredeyse kullanabileceğiniz yerel Web Hizmetlerini destekler . Neden neredeyse dedim . Javascript SOAP yerli değil, bu yüzden aslında bunu yapmak biraz daha karmaşık olurdu. Üzerinden SOAP göndermeniz ve almanız gerekir XmlHttpRequest. Javascript SOAP istemcileri için google'a bakın.


5

Bir STD I JavaScript ile oynamak hiçbir şans oldu driver={SQL Server};...bağlantı dizesi, ancak adlandırılmış DSN Tamam oldu:
Kurduğum TestDSN ve Tamam test ve sonra var strConn= "DSN=TestDSN";benim in-house test için deneme ve öğrenme amaçları üzerinde taşınan bu yüzden, çalıştı.

Sunucumuz çalışan birkaç örneği var, mesela server1 \ dev ve server1 \ Testi kaçmaya unutmadan biraz zaman harcamak başardı olarak işler biraz daha zor yapılan \olarak \\:)
bazı açmazları sonra server=server1;instanceName=devbağlantı dizeleri, sonunda var bu biri çalışmak için:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

Bir kullanıcı / pwd sağlamak yerine Windows kimlik bilgilerini kullanarak, Integrated Security = truev Integrated Security = SSPIv'nin inceliklerini keşfetmek ilginç bir saptırma buldum Trusted_Connection=Yes- bkz. Entegre Güvenlik = Doğru ve Entegre Güvenlik = SSPI

RecordCount'un -1varsayılan adOpenForwardOnly türünü kullanıyormuş gibi geri geleceğini unutmayın . Küçük sonuç kümeleriyle çalışıyorsanız ve / veya bellekteki tüm partiyi bir kerede rs.Open(strQuery, objConnection, 3); önemsemiyorsanız , (3 = adOpenStatic) kullanın ve bu geçerli bir değer verir.rs.RecordCount


4

Daha önce de belirtildiği gibi, istemci tarafı Javascript kullanılarak yapılmamalıdır, ancak istediğinizi daha güvenli bir şekilde uygulamak için bir çerçeve vardır.

Nodejs, Javascript'teki sunucu bağlantılarını kodlamanızı sağlayan bir çerçevedir, bu nedenle Nodejs'e bir göz atın ve muhtemelen veritabanlarıyla iletişim kurma ve ihtiyacınız olan verileri yakalama hakkında biraz daha fazla bilgi edineceksiniz.


3

(üzgünüm, bu SQL arka uçları hakkında daha genel bir cevaptı - SQL Server 2005'in WebServices özelliği ile ilgili cevabı okumamıştım. Ancak, bu özellik hala doğrudan soketler üzerinden HTTP üzerinden çalıştırılıyor, bu yüzden aslında mini bir web sunucusunu veritabanı sunucusuna aktardığından, bu yanıt hala alabileceğiniz başka bir yoldur.)

Ayrıca doğrudan soketler (google "javascript yuvaları") kullanarak da bağlanabilirsiniz ve HTML5 aynı şeyi yapmanıza izin verdiğine inandığım özelliğin bir parçası olarak Web Yuvaları olmasına rağmen, bu noktada doğrudan bu amaçla bir Flash dosyası kullanmak anlamına gelir.

Bazı insanlar güvenlik sorunlarını belirtir, ancak veritabanı izinlerinizi doğru şekilde tasarladıysanız, teorik olarak veritabanına OSQL de dahil olmak üzere herhangi bir ön uçtan erişebilmeniz ve güvenlik ihlali olmaması gerekir. Güvenlik sorunu, SSL ile bağlanmıyorsanız olurdu.

Son olarak, bunun teorik olduğuna eminim çünkü SSL veya SQL Server için iletişim protokollerini işlemek için herhangi bir JavaScript kütüphanesinin mevcut olduğuna inanmıyorum, bu yüzden bunları kendiniz anlamaya istekli olmadıkça tarayıcı ve veritabanı arasında bir web sunucusu ve sunucu tarafı komut dosyası yazma diline sahip olma yoluna gitmek daha iyidir.


2
İyi dedi. Bir web servisinden değil, doğrudan bir istemciden (yani şimdiye kadar yapılmış her kalın istemci) bir veritabanına erişmenin yanlış bir yanı yoktur. Windows kimlik doğrulaması ve iyi bir güvenlik katmanı kullanırsanız, bununla ilgili yanlış bir şey yoktur
Nick.McDermaid

1

İstemci tarafı javascripts SQL sunucusuna bağlanabilirsiniz sanmıyorum. Veritabanınızla etkileşimde bulunabilecek web uygulamaları oluşturmak ve yalnızca kullanıcı arayüzünüzü daha iyi etkileşimde bulunmak için javascript kullanmak için bazı sunucu tarafı dilleri seçmeniz gerekir.

dil tercihinize göre herhangi bir sunucu tarafı komut dosyası dilini alabilirsiniz:

  • PHP
  • ASP.Net
  • Raylar üzerinde yakut

1
Bu, bulabildiğim tek doğru cevaplardan biriydi. Hangi ASP.net seçeneklerini araştırmalıyım? Microsoft sürücülerine ek olarak başka nelere ihtiyacım var?
Rachael

ADO.Net veya Entity Framework / LinqToSql - bunların herhangi birini kullanabilirsiniz.
Vikram
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.