ADO.NET के वे सभी Objects जो कि ADO.NET के Disconnected Part को Define करने का काम करते हैं, हमें ये सुविधा Provide करते हैं कि हम उनमें Stored Disconnected Data को Edit या Modify कर सकते हैं। साथ ही ये Disconnected Objects अपने अन्दर किए गए Changes की History को भी किसी न किसी तरह से Hold रखते हैं। मूल रूप से यदि समझा जाए, तो Disconnected Objects में हम निम्नानुसार तीन Operations Perform कर सकते हैं:
- Adding New Rows (Records)
- Modifying Existing Row (Records)
- Deleting Existing Row (Records)
और इन तीनों कामों को Perform करने के लिए ADO.NET हमें एक से ज्यादा Options व एक से ज्यादा Objects Provide करता है।
Adding New Rows (Records)
किसी नए Row को DataTable में Add करने के दो तरीके होते हैं और किसी अन्य DataTable या Detached Rows यानी Existing Rows को भी DataTable Object में Add करने के दो तरीके होते हैं।
पहले तरीके के अन्तर्गत हम ये मानते हैं कि हमारे पास DataSet के रूप में Schema Available है या फिर DataTable के रूप में कम से कम एक Table का Structure मौजूद है। DataTable में नया Row Create करने का ये एक Shortcut तरीका होता है, जिसके अन्तर्गत हम Relevant Columns व उनकी विभिन्न Set Properties के साथ नया Row Create करते हैं। जैसे:
DataRow dr; dr = empTable.NewRow(); dr["EmployeeID"] = 110; dr["LastName"] = "Verma"; dr["FirstName"] = "Mukesh"; empTable.Rows.Add(dr);
जिस तरह से इस Code में हमने DataTable Object के साथ Add() Method को Use करते हुए उसमें नया Row Add किया है, उसी प्रकार से हम किसी DataGridView Object में भी नया Row Add कर सकते हैं।
इस तरीके के अलावा एक और तरीका है, जिसके अन्तर्गत हमें LoadDataRow() Method को Use करना होता है। ये Method हमें DataTable में नया DataRow Add करने की सुविधा Provide करता है साथ ही उस Newly Add होने वाले Row की विभिन्न Properties को केवल एक ही Method Call के माध्यम से Set करने की सुविधा Provide करता है। जैसे:
object[] rowValues = {“110”, “Verma”, “Mukesh”}
empTable.LoadDataRow(rowValues, false);
उपरोक्तानुसार Discuss किए गए दोनों ही तरीकों का मुख्य अन्तर ये है कि पहला तरीका Use करने पर DataTable Object में जो नया Row Add होता है, उस Row की RowState Property में DataRowState.Added मान Store हो जाता है। इसलिए इसी Statement के Point पर हम AcceptChanges() Method को Call करके DataSet या DataTable Object में Stored इस प्रकार के सभी Rows की RowState Property को DataRowState.Unmodified Set कर सकते हैं।
हालांकि दूसरे तरीके को Use करते समय LoadDataRow() Method के दूसरे Parameter के रूप में हम true मान Specify करके न केवल Row को DataTable/DataSet में Add कर सकते हैं, बल्कि उसकी RowState Property को DataRowState.Unmodified मान से भी Set कर देते हैं।
इसके अलावा Existing DataRows को DataTable में Add करने के लिए हम दो और तरीकों का प्रयोग कर सकते हैं। पहले तरीके में हम ImportRow() Method को Use करते हैं, जिसमें DataRow Object को Parameter की तरह Pass किया जाता है। जबकि दूसरे तरीके के रूप में हम Merge() Method को Use करते हैं, जो दो Disconnected Objects (DataSet, DataTable, DataRow, Array, etc…) के Data को Merge करने का काम करता है।
Modifying Existing Row (Records)
Disconnected Mode में किसी Existing Row को Modify करना काफी आसान होता है। क्योंकि हमें जिस Column के Data को Modify करना होता है, उसे Specify करके उसमें उपयुक्त Value को Assign करना होता है। जैसे:
DataRow dr; dr = empTable.Rows[0]; dr["LastName"] = "Mishra"; dr["FirstName"] = "Kuldeep";
ये Code Execute होने पर Employees DataTable के First Row के FirstName व LastName Column का Data Change हो रहा है। साथ ही जब उपरोक्त Code Execute होता है, तो Code Execute होने के साथ ही इस Row की RowState Property में Value के रूप में DataRowState.Modified मान Set हो जाता है।
यहां इस बात को फिर से याद कर लेना बेहतर रहेगा कि Disconnected DataTable में उपरोक्तानुसार Data को Modify करने का मतलब ये नहीं है कि Underlying Database के Row में भी Data Modify हो गया है। बल्कि जब तक हम Disconnected Data के लिए Update() Method को Successfully Use नहीं करते, तब तक Underlying DataSource पूरी तरह से Untouched ही रहता है।
Rows को Modify करने का एक और तरीका है, जिसे हम उपयोग में ले सकते हैं। इस तरीके के अन्तर्गत हम DataRow Object के साथ BeginEdit() व EndEdit() Method को Use करते हुए इन दोनों Methods के बीच हम हमारे Rows को Modify करते हैं। अन्तर केवल इतना है कि जब तक हम EndEdit() Method को Call नहीं करते, तब तक सभी Changes Buffered यानी Temporarily Save रहते हैं।
अत: यदि किसी कारणवश हम हमारे Buffered Changes को Underlying DataSource में Permanently Save करना न चाहें, तो CancelEdit() Method को Call करके हम हमारे Changes को Rollback यानी Discard कर सकते हैं। जैसे:
DataRow dr; dr.BeginEdit(); dr["LastName"] = "Mishra"; dr["FirstName"] = "Kuldeep"; dr.EndEdit(); //This could be dr.CancelEdit() too as per the requirement.
इस तरीके के अलावा एक और तरीका है, जिसका प्रयोग करके हम Disconnected Objects के Data को Modify कर सकते हैं। इस तरीके के अन्तर्गत हम DataRow Object की ItemArray Property में किसी Data Value से Filled Array को Assign कर सकते हैं। जैसे:
DataRow dr; DataRow = empTable.Rows[0]; dr.ItemArray = new object[] {null, "Mishra", "Kuldeep"};
जब हम उपरोक्तानुसार ItemArray Property को Use करते हैं, तो जिन Columns को हम null Value के साथ Specify करते हैं, Row के उन Columns की Value Change नहीं होती। जबकि यदि हम DataView Object के साथ Operate कर रहे होते हैं, तो Individual DataRowView Object को Identify कर सकते हैं और BeginEdit()/EndEdit() Methods को ठीक उसी तरह से Use कर सकते हैं, जिस तरह से DataRow Object के साथ करते हैं। साथ ही हम DataRow Object को DataRowView Object की Row Property का प्रयोग करके Directly Access कर सकते हैं।
DataRowView Object की IsEdit व IsNew नाम की दो और Properties होती हैं। इन दोनों Properties का प्रयोग इस बात का पता लगाने के लिए किया जा सकता है कि Row Edit हो रहा है या नहीं और यदि Row Edit हो रहा है, तो Edit होने वाला Row, New Row है या नहीं।
Deleting Existing Row (Records)
किसी Disconnected Object से किसी Row को Delete करना किसी भी अन्य Operation की तुलना में ज्यादा आसान है। जैसे:
DataRow dr; dr = empTable.Rows[0]; dr.Delete();
ये Statement Execute होते ही empTable की First Row को Delete करने के लिए इस Row की RowState Property को Deleted Mark कर देगा। हालांकि इस Marking के बावजूद वह Row, DataTable में तब तक Exist रहता है, जब तक कि हम DataAdapter Object के माध्यम से Update() Method को Call न करें अथवा DataTable के लिए AcceptChanges Method को Call न करें।
अत: ये Approach उस स्थिति में ज्यादा उपयोगी होता है, जबकि हम DataAdapter के माध्यम से Deleted Rows की Information को Underlying DataSource पर Send करते हैं, ताकि Underlying DataSource से Deleted Mark किए गए Rows Permanently Delete हो जाऐं।
क्योंकि यदि Delete Mark करने के स्थान पर DataTable से Row को वास्तव में Delete कर दिया जाए, तो DataAdapter को इस बात की जानकारी ही नहीं रहेगी, कि उसे Underlying DataSource से किन Rows को Permanently Remove करने के लिए DELETE SQL Statement को Execute करना है।
Row को Remove करने का एक और तरीका ये है कि हम DataRowCollection Object के लिए Remove() या RemoveAt() Method को Use कर सकते हैं, जहां DataTable.Rows Object वास्तव में DataRowCollection Type का एक Object होता है। जैसे:
DataRow dr; dr = empTable.Rows[0]; empTable.Remove(dr); OR empTable.RemoveAt(0);
या फिर यदि हम चाहें तो DataRowCollection.Clear() Method को Use करके DataTable के Rows Collection की सभी Rows को Completely Delete कर सकते हैं।
हालांकि Remove(), RemoveAt() व Clear() Methods किसी DataView Object के साथ Use नहीं किए जा सकते। इसलिए यदि हम DataView Object पर Operate कर रहे हों, तो या तो हमें DataView Object द्वारा Access की जाने वाली Underlying Tables को DataView.Table Property का प्रयोग करके Access करना होता है या फिर हम DataTable से Rows को Deleted Mark करने के लिए DataRowView.Delete() Method को Use कर सकते हैं।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook ADO.NET with C# in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
ADO.NET with C# in Hindi | Page:501 | Format: PDF