Theory
FestConnect ને database જોઈએ છે
અત્યાર સુધી FestConnect ના events અને registrations ને 'list' કહીને ચલાવી લીધું છે. ખરેખર તો એ database માં રહે છે, એ જ પ્રકારના database માં જેને DBMS માં તમે SQL થી design કરવાનું અને query કરવાનું શીખ્યા હતા. હવે સવાલ એ છે: events વાંચવા અને registration સાચવવા માટે .NET web application ખરેખર એ database સાથે વાત કઈ રીતે કરે છે?
જવાબ છે ADO.NET, જે .NET Framework નો બરાબર આ કામ માટે બનેલો ભાગ છે. આ પાઠમાં ADO.NET એટલે શું અને એ આપતી એક મોટી પસંદગી, એટલે કે connected કે disconnected, એની ઓળખાણ થશે.
Theory
ADO.NET એટલે શું
ADO.NET એ .NET Framework નો data-access ભાગ છે: એટલે કે classes નો એવો સમૂહ જેને તમારી application database સાથે જોડાવા, SQL commands ચલાવવા અને પરિણામો સંભાળવા વાપરે છે. એ પોતે database નથી; એ તમારા C# code અને તમે વાપરો છો તે database (SQL Server, અને providers દ્વારા બીજાં પણ) વચ્ચેનો પુલ છે.
એને FestConnect અને એના data વચ્ચેની નળી સમજો. તમે ADO.NET ને connection અને SQL command આપો છો; એ તમારી query database સુધી લઈ જાય છે અને rows પાછી લાવે છે. એ rows ને તમે કઈ રીતે સંભાળો છો એમાં જ બે models જુદા પડે છે.
Formula
Connected સામે disconnected: મુખ્ય વિચાર
ADO.NET data સાથે કામ કરવાના બે રસ્તા આપે છે.
Connected: તમે connection ખોલો છો, એ ખુલ્લું હોય ત્યાં સુધી rows વાંચો છો (DataReader વાપરીને), પછી બંધ કરો છો. ઝડપી અને હલકું, પણ તમે વાંચો ત્યાં સુધી આખો વખત લાઇન ખુલ્લી રાખવી પડે.
Disconnected: તમે connection ફક્ત એટલી વાર ખોલો છો કે data ની memory માં (DataSet માં) નકલ થઈ જાય, પછી એને બંધ કરીને એ in-memory નકલ સાથે છૂટથી કામ કરો છો. Connection ફક્ત થોડી વાર જ પકડી રખાય છે.
એક ખુલ્લી લાઇન પર વહેતું વાંચે છે; બીજું નકલ લઈને ફોન મૂકી દે છે.
Theory
કયું ક્યારે બંધબેસે
Connected model (DataReader) ત્યારે આદર્શ છે જ્યારે તમારે ફક્ત rows ઝડપથી વાંચીને આગળ વધવું હોય, દાખલા તરીકે FestConnect ના events સીધા page પર બતાવવા હોય. એ ફક્ત આગળ તરફ ચાલે છે અને ફક્ત વાંચી શકાય છે: તમે rows માંથી એક જ વાર, ઉપરથી નીચે વહેતા પસાર થાઓ છો. ઓછામાં ઓછી memory, વધુમાં વધુ ઝડપ.
Disconnected model (DataAdapter જે DataSet ભરે છે) ત્યારે આદર્શ છે જ્યારે તમારે data ને memory માં પકડી રાખવો હોય, એમાં page ફેરવવાં હોય, એને ઘણાં controls સાથે bind કરવો હોય, અથવા એને બદલીને ફેરફારો પછીથી પાછા મોકલવા હોય, અને એ બધું database નું connection રોકી રાખ્યા વગર કરવું હોય. ખુલ્લા connection થી છૂટકારો મેળવવા બદલામાં તમે થોડી memory અને થોડી તૈયારી આપો છો.
Quiz
ADO.NET ના connected અને disconnected models વચ્ચેનો મુખ્ય ફરક શું છે?
- Connected SQL વાપરે છે, જ્યારે disconnected SQL વાપરતું જ નથી
- તમે rows વાંચો ત્યાં સુધી connected database નું connection ખુલ્લું રાખે છે; disconnected data ની memory માં નકલ કરીને connection બંધ કરી દે છે, એટલે તમે નકલ સાથે કામ કરો છો
- Disconnected database વગર ચાલે છે, જ્યારે connected ને database જોઈએ છે
- એ એક જ વસ્તુનાં બે નામ છે
Show the answer
તમે rows વાંચો ત્યાં સુધી connected database નું connection ખુલ્લું રાખે છે; disconnected data ની memory માં નકલ કરીને connection બંધ કરી દે છે, એટલે તમે નકલ સાથે કામ કરો છો
ભેદ connection નો છે. Connected model માં તમે connection ખુલ્લું રાખો છો અને એના દ્વારા rows વાંચો છો (DataReader), આગળ તરફ વહેતા. Disconnected model માં તમે connection ફક્ત એટલી વાર ખોલો છો કે data ની memory માં નકલ થઈ જાય (DataAdapter દ્વારા DataSet માં), પછી એને બંધ કરીને એ in-memory નકલ સાથે કામ કરો છો. વિકલ્પ A ખોટો છે: data લાવવા બંને SQL વાપરે છે. વિકલ્પ C ખોટો છે: બંનેને database જોઈએ છે; 'disconnected' એટલે data load થયા પછી connection બંધ થાય છે, database નથી એવું નહીં. વિકલ્પ D ખોટો છે: આ ખરેખર જુદા રસ્તા છે અને એમના ભોગ પણ જુદા છે (ઝડપ તથા ઓછી memory સામે ખુલ્લી લાઇન વગરની છૂટ).
Think first
જોડાયેલા રહેવાને બદલે disconnect શા માટે થવું?
Connected reader જો વધુ ઝડપી અને હલકો હોય, તો disconnected DataSet model અસ્તિત્વમાં જ શા માટે છે? વિચારીને પછી tap કરો.
Show the answer
કારણ કે database નું connection દુર્લભ અને વહેંચાયેલું સાધન છે, અને મોટા પાયે એને ખુલ્લું રાખવું મોંઘું પડે છે. FestConnect જેવો web server એકસાથે સેંકડો વપરાશકારોને સેવા આપતો હોય, અને databases એકસાથે અમુક જ connections ને છૂટ આપે છે. જો દરેક page data બતાવે, એનાં pages ફેરવે અને એને બદલે ત્યાં સુધી આખો વખત પોતાનું connection ખુલ્લું રાખે, તો server પાસેથી connections ઝડપથી ખૂટી જાય. Disconnected model data ઝડપથી ઉપાડી લે છે, connection તરત છોડી દે છે, અને પછી તમને in-memory નકલ સાથે જેટલો વખત જોઈએ એટલો કામ કરવા દે છે, એટલે કીમતી connection લગભગ તરત જ પછીના request માટે મોકળું થઈ જાય છે. વળી એ તમને એ જ data ને ઘણાં controls સાથે bind કરવા, એને sort કરવા અને એનાં pages ફેરવવા, અને સાચવતાં પહેલાં offline બદલવા પણ દે છે. ઝડપી વાંચીને બતાવી દેવા માટે connected DataReader ઉત્તમ છે; connection pool પર દયા રાખીને data સાચવવો અને એની સાથે રમવું હોય ત્યારે disconnected DataSet વધુ સારું છે. ઉપાડો, છોડો, નકલ સાથે કામ કરો: એ જ disconnected નું તત્વજ્ઞાન છે.
At a glance
| બાબત | Connected (DataReader) | Disconnected (DataSet) |
|---|---|---|
| Connection | વાંચતી વખતે ખુલ્લું રહે છે | થોડી વાર ખૂલે, પછી બંધ થાય |
| Data | વહેતો, ફક્ત આગળ તરફ, ફક્ત વાંચી શકાય | Memory માં નકલ થાય, બદલી શકાય |
| ઝડપ અને memory | ઝડપી, ખૂબ હલકું | વધુ memory અને વધુ તૈયારી |
| કયા માટે શ્રેષ્ઠ | Page પર ઝડપી વાચન | Data પકડી રાખવો, page ફેરવવાં, offline બદલવો |
Summary
Key takeaways
- ADO.NET એ .NET Framework નો data-access ભાગ છે: એટલે કે .NET app database સાથે વાત કરવા વાપરે છે તે classes.
- એ પુલ છે, database નહીં: તમે connection અને SQL આપો છો, અને એ તમારા code તથા database વચ્ચે queries અને પરિણામો લઈ જાય છે.
- Connected model (DataReader): connection ખુલ્લું રાખો અને rows ને ફક્ત આગળ તરફ વહેતી વાંચો; ઝડપી અને હલકું, ઝડપી વાચન માટે શ્રેષ્ઠ.
- Disconnected model (DataAdapter અને DataSet): data ની memory માં નકલ કરો, connection બંધ કરો, અને નકલ સાથે કામ કરો; લવચીક, connection pool પર વધુ દયાળુ.
- Disconnect થવું અગત્યનું છે કારણ કે database નાં connections દુર્લભ અને વહેંચાયેલાં હોય છે, ખાસ કરીને વ્યસ્ત web server પર.
- ઝડપી વાંચીને બતાવવા માટે connected પસંદ કરો, data પકડી રાખવા, page ફેરવવા કે બદલવા માટે disconnected.
- યાદ રાખવાની કડી: connected ખુલ્લી લાઇન પર વહેતું વાંચે છે; disconnected નકલ લઈને ફોન મૂકી દે છે.