2011-10-15 11 views
9

के बीच उलझन में हर कोई मैं एक छात्र हूं और .NET और विशेष रूप से एमवीसी 3 विकास के लिए नया हूं, लेकिन मेरी एक परियोजना के लिए मुझे इस पर काम करना है और इसलिए सीखने के चरण के माध्यम से जाना समस्या और भ्रम का सामना करना पड़ रहा है डीबी कनेक्टिविटी, whast मैं एक डेटाबेस से रिकॉर्ड पुन: प्राप्त करने के बारे में d leanree के बारे में कुछ इस तरह है:SqlCommand और SqlDataAdapter

//Method One: 
var conn = new SqlConnection(conString.ConnectionString); 
const string cmdString = "Select * FROM table"; 
var cmd = new SqlCommand(cmdString, conn); 
var mySqlDataAdapter = new SqlDataAdapter(cmd); 
mySqlDataAdapter = new SqlDataAdapter(cmd); 
mySqlDataAdapter.Fill(myDataSet, "design"); 
// making a new SqlCommand object with stringQuery and SqlConnection object THEN a new SqlDataAdapter object with SqlCommand object and THEN filling up the table with the resulting dataset. 

लेकिन जब मैं बाहर MSDN Library जाँच की गई थी मैं पता चला कि SqlDataAdapter एक कंस्ट्रक्टर्स SqlDataAdapter (स्ट्रिंग, स्ट्रिंग) प्रदान करता है कि सीधे इस प्रकार एसक्यूएल कॉमांड की भूमिका को छोड़कर इस प्रकार की चयन करें:

//Method Two: 
var conn = new SqlConnection(conString.ConnectionString); 
const string cmdString = "Select * FROM table"; 
var mySqlDataAdapter = new SqlDataAdapter(cmdString, conn); 
mySqlDataAdapter.Fill(myDataSet, "design"); 

मेरे लिए छोटा और सुंदर लग रहा है, लेकिन मैं यहां उलझन में हूं कि अगर इस तरह से यह संभव है तो अधिकांश किताबें/शिक्षक पहले (एसक्लोकॉमैंड के रास्ते) क्यों जाते हैं।

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

अगर मैं बहुत नौसिखिया या धुंधला लगता हूं तो अग्रिम में माफी मांगना! मेरी अवधारणाओं को दूर करने वाली किसी भी मदद की सराहना करेंगे! धन्यवाद! :)

उत्तर

7

Errorstacks यह सही अभिव्यक्त किया:

  • SqlAdapter एक डाटासेट भरने के लिए प्रयोग किया जाता है।
  • SqlCommand का उपयोग किसी भी उद्देश्य के लिए किया जा सकता है जिसे आप बनाएं/पढ़ें/अपडेट/हटाएं ऑपरेशन, संग्रहीत प्रक्रिया निष्पादन और बहुत कुछ से संबंधित हैं।

इसके अलावा:

  • SqlCommand सुरक्षा के संबंध में कच्चे तार के उपयोग के खिलाफ एक बड़ा लाभ हो सकता है - वे Sql इंजेक्शन से बचाने कर सकते हैं। स्ट्रिंग के बजाय उपयोगकर्ता द्वारा प्रदान किए गए मानों के लिए पैरामीटर का उपयोग करें। फोर्मैट (...)।

मेरी निजी वरीयता एसक्यूएल कॉमांड में किसी भी एसक्यूएल स्ट्रिंग को लपेटना और दुर्भावनापूर्ण उपयोगकर्ताओं द्वारा एसक्यूएल इंजेक्शन से बचने के लिए एसक्यूएल पैरामीटर जोड़ना है।
दो दृष्टिकोणों के प्रदर्शन के संबंध में - मुझे उम्मीद नहीं है कि कोई अंतर है। (अगर कोई मुझे गलत साबित कर सकता है - ऐसा करो!)।
तो मैं लंबे संस्करण 1 के साथ चिपकने का सुझाव दूंगा और यदि आवश्यक हो तो कमांड प्लस पैरामीटर का उपयोग करें।

एक साइड नोट का थोड़ा सा - डेटासेट और डेटाटेबल हाल ही में लिंक 2 एसक्यूएल और एंटिटी फ्रेमवर्क के कारण खेल से बाहर हैं।
लेकिन निश्चित रूप से सादे पुराने एसक्यूएल कॉमैंड्स/एडाप्टर/रीडर का ज्ञान स्वागत है :)

-6

जल्दी करो! LINQ पर अपना ध्यान दें !!!

SQLDataset या TableAdapters जैसे कोई और अधिक सामग्री नहीं, कोई खुला कनेक्शन नहीं है। सबकुछ LINQ के साथ आसान हो जाता है।

LINQ नमूना:

मंद परिणाम = myDataContext.Employees में रोजगार से जहां emp.Salary> 10000 करें emp.ID, emp.SurName, ....

myDatagrid.datasource = परिणाम .toList

LINQ के साथ, आप एकल उद्धरण या आपके प्रश्नों के भीतर CRLF के बारे में चिंता करने के लिए ...

की जरूरत नहीं है और तुम भी एसक्यूएल टेबल, स्तंभों और वस्तुओं पर IntelliSense होगा!

+0

इस प्रश्न का उत्तर नहीं दिया। इसके अलावा, कभी-कभी LINQ उपलब्ध नहीं है। उदाहरण के लिए, यह संस्करण 3.5 से पहले .NET CE के संस्करण में उपलब्ध नहीं है। –

संबंधित मुद्दे