উত্তর:
অন্যদিকে, এটি:
যে কোন মুল্যে:
সুতরাং সত্যিই এটি আপনি যা করছেন তার উপর নির্ভর করে তবে আমি কেবলমাত্র একটি ডেটাসেট দ্বারা সমর্থিত এমন কোনও জিনিস প্রয়োজন না হওয়া পর্যন্ত আমি একটি ডেটা রিডার পছন্দ করি। স্কেলডাটাআরডিডার কেবল পঠনযোগ্য গ্রিডে বাঁধাইয়ের সাধারণ ডেটা অ্যাক্সেসের ক্ষেত্রে উপযুক্ত।
আরও তথ্যের জন্য, মাইক্রোসফ্টের অফিসিয়াল ডকুমেন্টেশন দেখুন ।
while (reader.Read())লুপের ভিতরে আইডিটাআরকর্ড হিসাবে ডেটাআরডার কাস্ট রিটার্ন প্রদানের জন্য কেবল একটি পুনরুদ্ধারকারী ব্লক ব্যবহার করুন ।
এর উত্তর বেশ বিস্তৃত হতে পারে।
মূলত, আমার জন্য প্রধান পার্থক্য যা সাধারণত আমার সিদ্ধান্তগুলিকে প্রভাবিত করে যার উপর ব্যবহার করা হয় তা হ'ল কোনও এসকিউএলডাটা রিডার দিয়ে আপনি ডাটাবেস থেকে ডেটা "স্ট্রিমিং" করছেন। একটি এসকিউএলডেটা অ্যাডাপ্টারের সাহায্যে আপনি ডাটাবেস থেকে এমন কোনও বস্তুতে ডেটা বের করছেন যা নিজেই আরও জিজ্ঞাসা করা যেতে পারে, পাশাপাশি সিআরইউডি অপারেশন চালিয়ে যাচ্ছে।
স্পষ্টতই ডেটা স্ট্রিমের সাথে এসকিউএলডেটাআরডারটি খুব দ্রুত, তবে আপনি কেবল একবারে একটি রেকর্ড প্রক্রিয়া করতে পারেন। একটি এসকিউএলডেটা অ্যাডাপ্টারের সাহায্যে আপনার কোডটি দিয়ে / পাস করার জন্য আপনার ডাটাবেস থেকে আপনার প্রশ্নের সাথে মিলে যাওয়া সারিগুলির একটি সম্পূর্ণ সংগ্রহ রয়েছে।
সতর্কতা: আপনি যদি কোনও এসকিউএলডেটা রিডার ব্যবহার করেন তবে সর্বদা, সর্বদা, সর্বদা নিশ্চিত করুন যে আপনি এসকিউএলডাটা রিডারটির সাথে সংযোগটি উন্মুক্ত রেখেছেন তাই সংযোগটি বন্ধ করার জন্য আপনি সঠিক কোডটি লিখেছেন। এটি করতে ব্যর্থতা বা ফলাফলগুলি প্রক্রিয়াকরণের ক্ষেত্রে ত্রুটির ক্ষেত্রে সংযোগটি বন্ধ করতে সঠিক ত্রুটি পরিচালনা করা আপনার সংযোগটি ফাঁস হয়ে অ্যাপ্লিকেশনকে ক্রপ করবে ।
আমার ভিবিকে ক্ষমা করুন, তবে এটি স্কেলডাটাআরডার ব্যবহার করার সময় আপনার ন্যূনতম পরিমাণের কোডটি হওয়া উচিত:
Using cn As New SqlConnection("..."), _
cmd As New SqlCommand("...", cn)
cn.Open()
Using rdr As SqlDataReader = cmd.ExecuteReader()
While rdr.Read()
''# ...
End While
End Using
End Using
সমতুল্য সি #:
using (var cn = new SqlConnection("..."))
using (var cmd = new SqlCommand("..."))
{
cn.Open();
using(var rdr = cmd.ExecuteReader())
{
while(rdr.Read())
{
//...
}
}
}
একটি স্কেলডাটা অ্যাডাপ্টার সাধারণত ডেটাসেট বা ডেটা টেবিল পূরণ করার জন্য ব্যবহৃত হয় এবং তাই আপনার সংযোগ বন্ধ হয়ে যাওয়ার পরে (সংযোগ বিচ্ছিন্ন অ্যাক্সেস) আপনার ডেটাতে অ্যাক্সেস থাকবে।
স্কেলডাটাআডার হ'ল একটি দ্রুত ফরোয়ার্ড এবং সংযুক্ত কার্সার যা সাধারণত ডেটাসেট / ডেটা টেবিল পূরণের চেয়ে দ্রুততর হয়।
তদ্ব্যতীত, একটি SQLDataReader দিয়ে, আপনি আপনার ডেটা একবারে একটি রেকর্ড মোকাবেলা করেন, এবং কোনও ডেটা মেমরিতে রাখেন না। স্পষ্টতই একটি ডেটা টেবিল বা ডেটাসেট দিয়ে আপনার মেমরির বরাদ্দ ওভারহেড করে।
আপনার যদি আপনার ডেটা মেমরির মধ্যে রাখার দরকার না থাকে, তাই কেবল স্টাফ সরবরাহের জন্য, এসকিএলডেটাআরডিডারটিতে যান। আপনি যদি কোনও সংযোগ বিহীন ফ্যাশনে আপনার ডেটা নিয়ে ডিল করতে চান তবে কোনও ডেটাসেট বা ডেটা টেবিল পূরণ করতে ডেটাএডাপ্টারটি চয়ন করুন।
ডাটাবেস থেকে ইন-মেমরি ডেটাসেট / ডেটা টেবিলটি পপুল করতে চাইলে একটি স্কেলডিটাএডাপ্টার ব্যবহার করুন। তারপরে আপনি সংযোগটি বন্ধ / নিষ্পত্তি করতে, ডেটাটেবল পাস / মেমরির আশেপাশে সেট করতে নমনীয়তা পাবেন। তারপরে আপনি ইনসেটকমন্ড / আপডেটকম্যান্ডের সাথে একত্রে ডেটা এন্ডিপ্লেটার ব্যবহার করে ডেটা চালিত করতে এবং এটি আবার ডিবিতে জোর করে রাখতে পারেন।
আপনার ব্যবসায়ের লজিকের চারপাশে ডেটা পাস করার জন্য নমনীয়তার প্রয়োজন ছাড়াই দ্রুত, কম-মেমরির পদক্ষেপের ডেটা অ্যাক্সেস চাইলে একটি স্কেলডাটাআরেডার ব্যবহার করুন। বৃহত্তর ডেটা ভলিউমের দ্রুত, কম-মেমরি ব্যবহারের জন্য এটি আরও অনুকূল mal কারণ এটি সমস্ত তথ্য একসাথে মেমরিতে লোড করে না - SQLDataAdapter পদ্ধতির সাথে ডেটাসেট / ডেটা টেবিলটি সমস্ত ডেটা দিয়ে পূর্ণ হবে যদি তাই হয় প্রচুর সারি এবং কলাম রয়েছে, এটি ধরে রাখতে প্রচুর স্মৃতি দরকার।
ফিল ফাংশনটি অভ্যন্তরীণভাবে একটি ডেটা রিডার ব্যবহার করে। যদি আপনার বিবেচনাটি "কোনটি আরও দক্ষ?", তবে কোনও রেকর্ড বাই সংগ্রহ রেকর্ডিংকে জনপ্রিয় করে তোলে এমন টাইট লুপে একটি ডেটা রিডার ব্যবহার করা, ডাটাএডাপ্টার ব্যবহার করার মতো সিস্টেমে একই লোড হওয়ার সম্ভাবনা রয়েছে illফিল।
(System.Data.dll, System.Data.Common.DbDataAdapter, FillIntern।)