ब्राउज़र में जावास्क्रिप्ट से SQL सर्वर डेटाबेस से कैसे जुड़ें?


285

क्या कोई मुझे स्थानीय स्तर पर जावास्क्रिप्ट से SQL Server 2005 डेटाबेस से कनेक्ट करने के लिए कुछ नमूना स्रोत कोड दे सकता है? मैं अपने डेस्कटॉप पर वेब प्रोग्रामिंग सीख रहा हूं।

या क्या मुझे किसी अन्य स्क्रिप्टिंग भाषा का उपयोग करने की आवश्यकता है? अगर आपके पास कुछ विकल्प सुझाएं, लेकिन मैं अब इसे जावास्क्रिप्ट के साथ करने की कोशिश कर रहा हूं। मेरा SQL सर्वर स्थानीय रूप से मेरे डेस्कटॉप पर स्थापित है - SQL सर्वर प्रबंधन स्टूडियो 2005 और IE7 ब्राउज़र।


16
निश्चित रूप से अनुशंसित नहीं है कि आप ऐसा करते हैं, लेकिन यह देखना अच्छा है कि इसके उत्तर क्या हो सकते हैं।
TheTXI

2
मैं Node.JS (सर्वर-साइड जावास्क्रिप्ट के कार्यान्वयन) से एक डेटाबेस से जुड़ना चाह रहा हूं और मैं यहां पहुंचा हूं। किसी को पता है कि मुझे उसके लिए कहाँ जाना चाहिए?
रॉय टिंकर

2
@RoyTinker: नोड-पोस्टग्रेज़ और नोड-मैस्कल है।
जानूस ट्रॉल्सन

1
वास्तविक एक मुफ्त डेटाबेस है जिसका आप उपयोग कर सकते हैं?

1
आप Node.js और JavaScript का उपयोग करके एक REST बैकएंड लिख सकते हैं और क्लाइंट साइड JavaScript के साथ इसे इंटरफ़ेस कर सकते हैं।
Fez Vrasta

जवाबों:


701

आपको डेटाबेस का उपयोग करने के लिए कई कारणों (खराब अभ्यास, सुरक्षा मुद्दों आदि) के लिए क्लाइंट जावास्क्रिप्ट का उपयोग नहीं करना चाहिए, लेकिन अगर आप वास्तव में ऐसा करना चाहते हैं, तो यहां एक उदाहरण है:

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, का उपयोग करना होगा। क्लाइंट जावास्क्रिप्ट का उपयोग केवल इंटरफेस के लिए किया जाना चाहिए।

और सर्वर जावास्क्रिप्ट के अस्तित्व के बारे में एक प्राचीन किंवदंती की अफवाहें हैं, लेकिन यह एक और कहानी है। ;)


323
बहुत ज्यादा एकमात्र व्यक्ति होने के लिए बधाई जो वास्तव में यह दर्शाता है कि यह संभव है (हालांकि अनुशंसित नहीं है)।
TheTXI

6
जबकि यह ओपी के सेट अप पर काम कर सकता था - उसने कहा कि वह "वेब प्रोग्रामिंग" सीखना चाहता था - और कम सुरक्षा वातावरण में इंटरनेट एक्सप्लोरर वेब प्रोग्रामिंग नहीं है।
क्वेंटिन

27
मुझे समझ नहीं आया कि यह टिप्पणी एक नकारात्मक वोट के रूप में क्यों योग्य है। मैं समझाता हूं कि यह कैसे करना है लेकिन उसे बताएं कि इसका उपयोग न करें।
फैबियो विनीसियस बिंदर

26
fbinder: कुछ लोग इसे वोट करेंगे क्योंकि उन्हें लगता है कि डेटाबेस कनेक्टिविटी और जावास्क्रिप्ट से क्वेरी करने का कोई भी प्रयास एक बड़ी संख्या में है (भले ही आप बहुत स्पष्ट रूप से बताएं)। अगर मैं तुम होते, तो मुझे इस पर मिलने वाले एक या दो नकारात्मक मतों से कोई फर्क नहीं पड़ता और बस इसे प्राप्त होने वाले कई वोटों का आनंद लें क्योंकि यह एकमात्र उत्तर है जो वास्तव में प्रश्न का उत्तर देता है।
TheTXI

36
यह संभवतः ध्यान दिया जाना चाहिए, हालांकि, यह उत्तर ActiveX के उपयोग के कारण गैर-IE ब्राउज़रों के लिए काम नहीं करेगा (भले ही मूल पोस्टर IE के अपने उपयोग के बारे में स्पष्ट था)।
theTXI

25

ऐसा करना वास्तव में बुरा होगा क्योंकि आपके कनेक्शन स्ट्रिंग को साझा करने से आपकी वेबसाइट इतनी कमजोरियों के लिए खुल जाती है कि आप बस पैच अप नहीं कर सकते, यदि आप इसे सुरक्षित करना चाहते हैं तो आपको एक अलग विधि का उपयोग करना होगा। अन्यथा आप अपनी साइट का लाभ उठाने के लिए एक विशाल ऑडियंस के लिए खोल रहे हैं।


7
अपवोट क्योंकि आपने वास्तव में समझाया कि यह एक बुरा विचार क्यों है
उलटा हुआ इंजीनियर

सुरक्षा उपाय तकनीकी
उपयोगों की

9
वोट नीचे क्योंकि ओपी ने पूछा कि यह अच्छा या बुरा अभ्यास नहीं था, उन्होंने पूछा कि कैसे। आप सम्मिलित कर सकते हैं कि यह एक वास्तविक उत्तर के साथ एक बुरा विचार क्यों हो सकता है, लेकिन सिर्फ यह कहना कि यह एक बुरा विचार है इसका स्वयं का उत्तर देने के लायक नहीं है, यह एक टिप्पणी है।
वॉबल्स

1
क्या होगा अगर आप ऑन-प्रिमाइसेस सर्वर के साथ एक सुरक्षित फ़ायरवॉल के पीछे कुछ लिख रहे हैं, क्या यह अभी भी खराब है?
ब्रायन ब्रायन

अगर मैं गलत हूं तो मुझे सुधारें लेकिन अगर प्रदान किया गया उपयोगकर्ता केवल पढ़ा जाता है, और आप प्रबंधित करते हैं कि वे किन तालिकाओं तक पहुंच सकते हैं, तो यह तकनीकी रूप से सुरक्षित है जब तक कि कुछ नहीं बदलता? जब तक पूरे DB में गैर संवेदनशील जानकारी न हो, मैं या तो सलाह नहीं दूंगा। एक और डीबी में संवेदनशील जानकारी डाल सकता है। मैं कल्पना कर सकता हूं कि यह किसी संवेदनशील जानकारी के साथ स्थैतिक वेबसाइट के लिए उपयोगी है। यदि आवश्यक हो, तो किसी अन्य सर्वर पर oautj2 async का उपयोग कर सकते हैं।
जो फ्लेक

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+ देशी वेबसर्विस का समर्थन करता है जिसे आप लगभग उपयोग कर सकते हैं हालांकि मैं इसका सुझाव नहीं दूंगा, क्योंकि सुरक्षा जोखिमों का सामना करना पड़ सकता है। मैंने लगभग क्यों कहा । खैर जावास्क्रिप्ट सोप मूल नहीं है, इसलिए यह वास्तव में इसे बनाने के लिए थोड़ा और अधिक जटिल होगा। आपको SOAP भेजना और प्राप्त करना होगा XmlHttpRequest। जावास्क्रिप्ट सोप ग्राहकों के लिए Google की जाँच करें।


5

एक HTA में जावास्क्रिप्ट के साथ खेलने पर मुझे driver={SQL Server};...कनेक्शन स्ट्रिंग के साथ कोई भाग्य नहीं था , लेकिन एक नाम DSN ठीक था:
मैंने TestDSN की स्थापना की और इसने ओके का परीक्षण किया, और फिर var strConn= "DSN=TestDSN";काम किया, इसलिए मैंने अपने इन-हाउस परीक्षण और सीखने के उद्देश्यों के लिए प्रयोग किया।

हमारे सर्वर कई चल रही है, जैसे server1 \ देव और server1 \ टेस्ट जो के रूप में मैं से बचने के लिए भूल कुछ समय बर्बाद करने में कामयाब बातें थोड़ा और अधिक मुश्किल बना \के रूप में \\:)
के साथ कुछ मृत-समाप्त होने के बाद server=server1;instanceName=devइस संबंध तार में, मैं अंत में मिला एक काम करने के लिए:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

उपयोगकर्ता / pwd की आपूर्ति करने के बजाय Windows क्रेडेंशियल्स का उपयोग करना, मैंने पाया कि एक दिलचस्प मोड़ Integrated Security = truev Integrated Security = SSPIv की सूक्ष्मता की खोज कर रहा था Trusted_Connection=Yes- एकीकृत सुरक्षा = सत्य और एकीकृत सुरक्षा = SSPI के बीच अंतर देखें

इस बात से सावधान रहें कि -1डिफॉल्ट adOpenForwardOnly प्रकार का उपयोग करने पर RecordCount वापस आ जाएगा । यदि आप छोटे रिजल्ट सेट के साथ काम कर रहे हैं और / या एक ही बार में पूरी मेमोरी का उपयोग नहीं करते हैं, तो rs.Open(strQuery, objConnection, 3); (3 = adOpenStatic) का उपयोग करें और यह वैध हैrs.RecordCount


4

जैसा कि पहले कहा गया है कि ग्राहक पक्ष जावास्क्रिप्ट का उपयोग नहीं किया जाना चाहिए, लेकिन इसे लागू करने के लिए एक रूपरेखा है जिसे आप अधिक सुरक्षित रूप से चाहते हैं।

Nodejs एक फ्रेमवर्क है जो आपको जावास्क्रिप्ट में सर्वर कनेक्शन को कोड करने की अनुमति देता है इसलिए Nodejs पर एक नज़र डालें और आप संभवतः डेटाबेस के साथ संचार करने और आपके द्वारा आवश्यक डेटा हथियाने के बारे में थोड़ा और जानेंगे।


3

(क्षमा करें, यह एसक्यूएल बैकएंड्स के बारे में अधिक सामान्य उत्तर था - मैंने SQL सर्वर 2005 के वेबसर्विस फ़ीचर के बारे में उत्तर नहीं पढ़ा था। हालाँकि, यह सुविधा अभी भी सीधे सॉकेट्स के बजाय HTTP पर चलाई जाती है, इसलिए अनिवार्य रूप से उन्होंने इसका निर्माण किया है। डेटाबेस सर्वर में एक मिनी वेब सर्वर, इसलिए यह उत्तर अभी भी एक और मार्ग है जिसे आप ले सकते हैं।)

आप सीधे सॉकेट्स का उपयोग करके भी कनेक्ट कर सकते हैं (Google "जावास्क्रिप्ट सॉकेट्स") और सीधे इस बिंदु पर मेरा मतलब है कि इस उद्देश्य के लिए एक फ्लैश फ़ाइल का उपयोग कर रहा है, हालांकि एचटीएमएल 5 में वेब सॉकेट्स उस युक्ति के हिस्से के रूप में हैं जो मुझे विश्वास है कि आप एक ही काम करते हैं।

कुछ लोग सुरक्षा समस्याओं का हवाला देते हैं, लेकिन अगर आपने अपने डेटाबेस की अनुमति को सही तरीके से डिज़ाइन किया है, तो आपको सैद्धांतिक रूप से किसी भी सामने के छोर से डेटाबेस का उपयोग करने में सक्षम होना चाहिए, जिसमें ओएसक्यूसी शामिल है, और सुरक्षा ब्रीच नहीं है। सुरक्षा मुद्दा, तब होगा, यदि आप एसएसएल के माध्यम से कनेक्ट नहीं कर रहे थे।

अंत में, हालाँकि, मुझे पूरा यकीन है कि यह सब सैद्धांतिक है क्योंकि मुझे विश्वास नहीं है कि एसएसएल या एसक्यूएल सर्वर के लिए संचार प्रोटोकॉल को संभालने के लिए कोई भी जावास्क्रिप्ट लाइब्रेरी मौजूद है, इसलिए जब तक आप इन चीजों का पता लगाने के लिए तैयार नहीं होते हैं, तब तक यह अपने आप हो जाएगा। ब्राउज़र और डेटाबेस के बीच एक वेब सर्वर और सर्वर-साइड स्क्रिप्टिंग भाषा होने का मार्ग जाना बेहतर है।


2
ख़ूब कहा है। किसी क्लाइंट से सीधे डेटाबेस तक पहुंचने में कोई गड़बड़ी नहीं है (यानी हर मोटा ग्राहक) और वेब सेवा के माध्यम से नहीं। यदि आप विंडोज़ प्रमाणीकरण और एक अच्छी सुरक्षा परत का उपयोग करते हैं तो इसमें कुछ भी गलत नहीं है
Nick.McD मत्स्यांगना

1

मुझे नहीं लगता कि आप क्लाइंट साइड javascripts से SQL सर्वर से कनेक्ट कर सकते हैं। वेब एप्लिकेशन बनाने के लिए आपको कुछ सर्वर साइड लैंग्वेज चुनने की जरूरत है जो आपके डेटाबेस के साथ इंटरैक्ट कर सकती है और जावास्क्रिप्ट का उपयोग कर सकती है ताकि आप अपने यूजर इंटरफेस को बेहतर बना सकें।

आप अपनी भाषा वरीयता के आधार पर किसी भी सर्वर साइड स्क्रिप्टिंग भाषा को चुन सकते हैं:

  • पीएचपी
  • ASP.Net
  • रूबी ऑन रेल्स

1
यह केवल उन सच्चे उत्तरों में से एक था जो मुझे मिल सकते थे। ASP.net विकल्पों की मुझे क्या जांच करनी चाहिए? Microsoft ड्राइवरों के अलावा मुझे और क्या चाहिए?
राचेल २

आप संभावित रूप से ADO.Net या Entity Framework / LinqToSql का उपयोग कर सकते हैं - इनमें से कोई भी।
विक्रम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.