2010-10-21 8 views
12

का उपयोग कर SQL सर्वर डेटाबेस तक पहुंचने का सबसे अच्छा तरीका मैं .NET के लिए नया हूं और SQL सर्वर डेटाबेस जैसे ADO.NET और इकाई ढांचे के बारे में पूछने के कई अलग-अलग तरीकों के बारे में सुना है।सी # .NET

क्या कोई मुझे नए अनुप्रयोगों के लिए जाने का सबसे अच्छा तरीका बता सकता है?

किसी भी मदद या सुझाव के लिए धन्यवाद।

+0

आपके पास कितना प्रोग्रामिंग अनुभव है? पहले डेटाबेस का उपयोग किया है? – Onkelborg

+0

मेरे पास कुछ बुनियादी सी # ज्ञान है और एसक्यूएल को पता है, मुझे पहले सी # प्रोग्राम में डीबी तक पहुंच नहीं है। – user483267

+1

यह एक विस्तृत खुला प्रश्न है। कोई भी अच्छा जवाब इस बात पर निर्भर करेगा कि आप क्या करना चाहते हैं, उस समय सीमा के साथ आपको काम करना है, और आप पहले से ही परिचित/आरामदायक हैं। – jac

उत्तर

10

यहाँ एक उदाहरण डेटाबेस से कोड पीढ़ी के साथ एफई का उपयोग कर (एक वास्तविक अनुप्रयोग के लिए है आप संभवतः कोड से अपना डीबी उत्पन्न करना चाहते हैं):

  1. अपनी परियोजना पर राइट क्लिक करें >> जोड़ें >> नया I tem >> ADO.NET इकाई डेटा मॉडल।
  2. अपने संस्थाओं अर्थात MyEntities.edmx लिए एक नाम चुनें, अगला क्लिक करें
  3. का चयन करें "डेटाबेस से उत्पन्न करें"
  4. कॉन्फ़िगर एक 'नया कनेक्शन' अगर वहाँ एक नहीं है पहले से ही वहाँ। आगामी।
  5. उन संस्थाओं, दृश्यों और एसपीआरओसी का चयन करें जिन्हें आप संस्थाओं में शामिल करना चाहते हैं। समाप्त।

आपको अपनी परियोजना में MyEntities.edmx फ़ाइल दिखाई देगी। आप अपनी संस्थाओं और रिश्तों के आरेख को देखने के लिए इसे डिज़ाइन व्यू में खोल सकते हैं। ध्यान दें कि प्रत्येक इकाई में प्राथमिक कुंजी होनी चाहिए - ऐसा करने का सबसे आसान तरीका एक आईडी - प्रत्येक तालिका में ऑटो वृद्धि फ़ील्ड, या एक GUID कॉलम जोड़ना है। वैसे भी अब आप इस तरह अपने डाटाबेस क्वेरी कर सकते हैं:

// assuming a "Product" table, which has an entity pluralized to "Products" 

MyEntities db = new MyEntities(); 

var cheapProducts = db.Products.Where(p => p.Price > 30); // var is IEnumerable<Product> 
2

NHibernate जाने का रास्ता है। अधिक जानकारी के लिए http://nhforge.org और http://sf.net/projects/nhibernate देखें।

एंटीटी फ्रेमवर्क और एनएचबेर्नेट के बीच मुख्य अंतर यह है कि इकाई फ्रेमवर्क केवल माइक्रोसॉफ्ट एसक्यूएल सर्वर के लिए है (ओरेकल समर्थित है, लेकिन समर्थन आदर्श नहीं है)। NHibernate many many many डेटाबेस का समर्थन करता है।

+1

यदि आप इस विकल्प के साथ जाते हैं तो फ्लुएंट एनएचबेर्नेट प्राप्त करने पर भी विचार करें। –

2

Entity Framework सबसे आसान है, और उसके में बनाया गया।

आपको बस इतना करना है महत्वपूर्ण अपने मॉडल है, और फिर बस सरल कक्षाएं, कि स्वचालित रूप से आपके db पर मैप किए जाते अद्यतन करें।

यह सामान्य वस्तुओं को अपडेट करने जैसा है, लेकिन अंत में आप SaveChanges को कॉल करते हैं।

+1

यदि आप प्रोजेक्ट शुरू कर रहे हैं जो कुछ वर्षों तक टिकेगा तो ईएफ का उपयोग न करें। यह राज्य की जानकारी के साथ आपके डोमेन ऑब्जेक्ट्स को प्रदूषित करेगा। आपको कोडिंग की विशिष्ट शैली का उपयोग करने के लिए मजबूर कर देगा ... ईएफ के लिए विजुअलस्टूडियो टूल्स आधे बैक हैं। लंबी परियोजनाओं के लिए मैं एनएचबीर्नेट का उपयोग करने की सिफारिश करूंगा। –

+0

इस तरह के बीएस, बॉक्स के बाहर आप राज्य के साथ संस्थाएं प्राप्त करते हैं। लेकिन अन्य बहुत ही सरल विकल्प हैं। क्या आपने हाल ही में ईएफ को भी देखा है? मुझे आपकी मदद करने दें .. (http://channel9.msdn.com/Blogs/wriju/POCO- टेम्पलेट-in-ADONET- एंटीटी- फ्रेमवर्क) – Nix

2

LINQ से SQL के साथ काम करना बहुत आसान है। आप डिज़ाइनर में अपनी डेटाबेस टेबल खींच और छोड़ सकते हैं और कुछ ही मिनटों में बहुत सरल प्रश्न लिख सकते हैं।

NorthwindDataContext db = new NorthwindDataContext(); 

    var products = from p in db.Products 
        select p; 

कौन सा मूल रूप से उत्पादों से चुनें * में अनुवाद होगा

कुछ अन्य चुनिंदा नमूने:

var products = from p in db.Products 
        where p.Category.Name == "Beverages" 
        select p; 

    var products = from p in db.Products 
        orderby p.Name 
        select p; 
+2

'var products = db.Products;' – SLaks

+1

LINQ वाक्यविन्यास दिखाने की कोशिश कर रहा है ... जो कुछ हद तक एसक्यूएल – Dismissile

+0

के समान है, एक नई परियोजना पर एक सामान्य उद्देश्य ओआरएम समाधान के लिए मैं लिंक-टू-एसक्यूएल पर एनएचबेर्नेट के साथ जाऊंगा लेकिन यह बॉक्स के बाहर काम करना आसान होगा। – flatline

2

मेरी राय में सबसे अच्छा समाधान डाटाबेस और अनुप्रयोग (डेटा परत के कुछ प्रकार), बीच मध्यवर्ती वर्ग बनाने के लिए है, जिन तक प्रश्नों का प्रबंधन करने के लिए तरीके का एक नंबर।SQLServer के लिए एक सादृश्य के रूप में SQLite के आधार पर नीचे विवरण (एडीओ कनेक्टर)

उल्लेख वर्ग सिंगलटन द्वारा कर सकते हैं, और आप इसे उदाहरण भी आप अपने आवेदन में चाहते हैं कॉल कर सकते हैं - SQLite यह कर सकते हैं के लिए इस तरह दिखता है:

private static SQLite instance; 

public static SQLite getInstance() 
{ 
    if(instance == null) 
    { 
    instance = new SQLite(); 
    thread = Thread.CurrentThread.ManagedThreadId; 
    } 
    return instance; 
} 

आप उदाहरण इस तरह से प्राप्त कर सकते हैं:

:

SQLite db = SQLite.getInstance(); 

इस वर्ग के उदाहरण के लिए डेटा हेरफेर के लिए विभिन्न तरीकों को शामिल कर सकते

public SQLiteCommand prepareQuery(string sql) 
{ 
    cmd = new SQLiteCommand(sql, conn); 
    return cmd; 
} 

public SQLiteDataReader executeReader() 
{ 
    return cmd.ExecuteReader(); 
} 

public int executeInt() 
{ 
    object obj = cmd.ExecuteScalar(); 
    return (int)obj; 
} 

लेकिन लेनदेन प्रबंधन और निदान कार्य भी। तो अब - यदि आप अन्य डीबी स्रोत या यहां तक ​​कि डीबी प्रकार हैं, तो आप इस तरह की कक्षा में अपने आवेदन में उपयोग कर सकते हैं, आप अगली डेटा-लेयर बना सकते हैं (उदाहरण के लिए ओरेकल या एमएसएसक्यूएल, माईएसक्यूएल ...) जिनमें से प्रत्येक में उपकरण हैं उदाहरण के लिए एक ही इंटरफ़ेस:

IDataBase 

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

+1

ओपी का लक्ष्य पूरी तरह से शैक्षिक होने तक, अपने आप को कताई करने के बजाए एक पूर्ववर्ती डीबी अबास्ट्रक्शन का उपयोग करना संभवतः आसान है। – Jimmy

+0

ऐसी स्थिति में सभी ग्राहकों के साथ समान परत संगत प्राप्त करना मुश्किल है – UGEEN