DataReader - DataReader

Yilda ADO.NET, a DataReader ma'lumotlar manbasidan ma'lumotlarni ketma-ket o'qish uchun ishlatiladigan ob'ektlarning keng toifasi.[1] DataReaders ma'lumotlarga kirishning juda samarali usulini taqdim etadi va uni a Olovli shlangi kursori dan ASP Classic, bundan tashqari yo'q server tomoni kursor ishlatilgan. DataReader a-ni ajratadi Jadvalda ma'lumotlar oqimi dan Microsoft SQL Server va boshqa manbalardan ma'lumotlarni olishning boshqa usullari.

DataReader-ga odatda so'rovni, ixtiyoriy ravishda har qanday parametrlarni va so'rovni bajaradigan ulanish ob'ektini o'z ichiga olgan Buyruq ob'ekti hamroh bo'ladi.

DataReader turlari

DataReader sinfi mavjud emas ADO.NET, lekin amalga oshiradigan bir qator sinflar mavjud IDataReader interfeys:

  • System.Data.SqlClient.SqlDataReader
  • System.Data.OleDb.OleDbDataReader
  • Oracle.OracleClient.OracleDataReader

DataReaders kichik iz va yaxshi ishlashga ega, chunki ularning har biri berilgan vazifaga mos ravishda ishlab chiqilgan, ammo bu bitta ma'lumot manbasidan ikkinchisiga ko'chirilishi mumkin bo'lgan dasturni yozishni qiyinlashtiradi. Ba'zi provayderga tegishli DataReaders ma'lumotlar bazasi tomonidan ishlatiladigan turlarni ochib beradi - masalan, int Microsoft SQL Serverda qiymatlar nolga teng bo'lishi mumkin, lekin .NET Framework 2.0 versiyasidan oldin.

Kuchli va zaif yozish

Ma'lumotlarni olish uchun DataReader-dan foydalanganda, ishlab chiquvchi maydon qiymatlarini qattiq yozilgan tarzda o'qishni tanlashi mumkin ( misol: myReader.GetString (12) ) yoki kuchsiz yozilgan tarzda, keyin qaytib keladi System.Objects ( misol: myReader.GetValue (12) ). Ikkala yondashuvning ham ijobiy va salbiy tomonlari bor.

Qattiq terilgan qidirish usullaridan foydalanish, ayniqsa, asosiy ma'lumotlarni aniq bilmasdan, ancha noqulay bo'lishi mumkin. Ma'lumotlar bazasidagi raqamli qiymatlar bir nechtasiga tarjima qilishi mumkin .NET turlari: Int16, Int32, Int64, Float, O'nli, yoki Valyuta. Noto'g'ri turdan foydalanib qiymatni olishga urinish istisno qilinishiga olib keladi, bu esa kodning ishlashini to'xtatadi va dasturni sekinlashtiradi. Bu to'g'ri turdan foydalanganda ham to'g'ri, lekin a ga duch keling DbNull qiymati ( yordamida oldini olish mumkin IsDbNull DataReader sinfining mantiqiy funktsiyasi ). Ushbu qidirish usulining foydasi shundaki, ma'lumotlarni tekshirish tezroq amalga oshiriladi, bu esa ma'lumotlarni tuzatish ehtimolini yaxshilaydi.

Zaif terilgan ma'lumotlarni qidirish tezkor kod yozish imkonini beradi va ishlab chiquvchi qanday turdagi turlari qaytarilishini oldindan bilmaganida ma'lumotlardan biron bir tarzda foydalanishga imkon beradi. Bundan tashqari, dasturchi biroz kuch sarflab, qiymatni tegishli turidagi o'zgaruvchiga chiqarishi mumkin GetFieldType yoki GetDataTypeName DataReader-ning usullari.

Umumiy xatolar

DataReader ba'zi hollarda a o'rniga ishlatilishi mumkin DataTable, ammo ko'plab dasturchilar tajribaga ega ulanish shishiradi ushbu yondashuvga rioya qilganda. DataReader-dan faqat (allaqachon) ochilishga qarshi foydalanish mumkin ma'lumotlar bazasiga ulanish; bu ulanish DataReader-ga qadar yopilmaydi Yo'q qiling usuli deyiladi. Agar ma'lumotlar qayta ishlanayotganda istisno qilingan bo'lsa, masalan tasvirlanganidek Kuchli va kuchsiz terish, yuqorida Yo'q qiling Agar dasturchi DataReader-ni ishlatmasdan aniq e'lon qiladigan va yo'q qiladigan kod yozsa, hech qachon usul chaqirilmaydi harakat qilib ko'ring-nihoyat blokirovka qilish. The C # foydalanish qurish misolida quyida keltirilgan kod misolida ko'rsatilgandek, bu muammodan qochishning yaxshi usuli.

Namuna kodi

DataReader yordamida SQL ma'lumotlariga kirishning namunasi

bekor DataTest(){    foydalanish (SqlConnection ulanish1 = yangi SqlConnection(...))    {        ulanish1.Ochiq();        SqlCommand mycommand = yangi SqlCommand("someTable-dan * tanlang", ulanish1);        foydalanish (SqlDataReader o'qiydigan = mycommand.ExecuteReader())        {            agar (o'qiydigan != bekor)                esa (o'qiydigan.O'qing())                    Konsol.WriteLine(o'qiydigan.GetValue(0).ToString() + ":" + o'qiydigan.GetTypeName(0));        }        mycommand.Yo'q qiling();    }}
foydalanish Tizim;foydalanish Tizim.To'plamlar.Umumiy;foydalanish System.Linq;foydalanish System.Text;foydalanish System.Data.Odbc;foydalanish MySql.Data.MySqlClient;ism maydoni ConsoleApplication1{    sinf Dastur    {        statik bekor Asosiy(mag'lubiyat[] kamon)        {            mag'lubiyat Ulanish = "Server = localhost; Uid = root; Pwd = threeu; Ma'lumotlar bazasi = Xodim";            MySql.Ma'lumotlar.MySqlClient.MySqlConnection ulanish = yangi MySql.Ma'lumotlar.MySqlClient.MySqlConnection(Ulanish);                      MySqlCommand kom = yangi MySqlCommand("emp dan * tanlang", ulanish);            ulanish.Ochiq();            // IAsyncResult a;            MySqlDataReader Ada = kom.ExecuteReader();            esa (Ada.O'qing())            {                Konsol.WriteLine(Ada[0]);            }        }    }}

Adabiyotlar

  1. ^ "DataAdapters va DataReaders". docs.microsoft.com. Microsoft. Olingan 4 sentyabr 2017.