سؤال

لقد قمت بالتطوير في كل من VB6 وVB.NET، واستخدمت كائنات ADODB في VB6 للتعامل مع التنقل في مجموعة السجلات (أي.وMoveFirst، وMoveNext، وما إلى ذلك.الأساليب)، ولقد استخدمت ADO.NET للتعامل مع الاستعلامات ذات طبيعة صف تلو الآخر (أي لكل صف في Table.Rows ...)

ولكن الآن يبدو أنني وصلت إلى معضلة.أقوم الآن بإنشاء برنامج في VB.NET حيث أحتاج إلى استخدام الوظيفة المكافئة لأوامر النقل الخاصة بكائن Recordset القديم.هل يحتوي VB.NET على نوع من الكائنات التي تدعم هذه الوظيفة، أم هل يجب علي اللجوء إلى استخدام كائن ADODB COM القديم؟

يحرر:للتوضيح فقط، أريد أن يكون المستخدم قادرًا على التنقل عبر الاستعلام للأمام أو للخلف.يعد التكرار عبر الصفوف مهمة بسيطة.

هل كانت مفيدة؟

المحلول

ليست هناك حاجة للعودة إلى الأيام الخوالي السيئة.إذا كان بإمكانك تقديم مثال على الكود الزائف، فيمكنني ترجمته إلى vb.net من أجلك.

هذا نوع من الطريقة العامة للقيام بذلك.

Dim ds as DataSet

'populate your DataSet'

For each dr as DataRow in ds.Tables(<tableIndex>).Rows
  'Do something with the row'

Next

لكل تحرير 1:سيقوم المستخدم بالتنقل بين النتائج، وليس الاستعلام.لذا فإن ما تريد القيام به هو إما أ) الحصول على النتائج وعرض فهرس الصف الحالي فقط لـ ds.Tables.Row() لهم، أو ب) تنفيذ استعلام جديد مع كل تنقل (ليس خيارًا حقيقيًا جيد الأداء.)

لكل تعليق:لا، لم يفعلوا ذلك.لكن المستخدم عادةً لن يعمل بشكل تفاعلي مع قاعدة البيانات بهذه الطريقة.ستحتاج إلى الحصول على مجموعة البيانات/جدول النتائج، واستخدام الأزرار لاسترداد الصف ذي الصلة من مجموعة البيانات/الجدول.

  • الصف الأول هو DataTable.Rows(0)
  • الصف الأخير هو DataTable.Rows(DataTable.Rows.Count-1)
    • لأي صف بينهما (قم بتخزين فهرس الصفوف المعروض حاليًا في تطبيقك)، ثم اتصل
  • DataTable.Rows(currentRowIndex -1) للسابق و
  • DataTable.Rows(currentRowIndex +1) للتالي.

نصائح أخرى

وكل هذا يتوقف على استخدام: إذا كنت بحاجة فقط لسرد نتائج استعلام واحد أو أكثر يجب عليك استخدام datareader. وأشار DOK بها، انها للقراءة فقط وFOWARD فقط حتى انها سريعة. http://www.startvbdotnet.com/ado/sqlserver.aspx

إذا كنت بحاجة إلى التنقل أنت السجلات يجب عليك استخدام البيانات. http://www.c-sharpcorner.com/ UploadFile / raghavnayak / DataSetsIn.NET12032005003647AM / DataSetsIn.NET.aspx

ويضم مجموعة البيانات أيضا ميزة العمل "قطع"، وذلك على بناء كل منطق، وفقط عندما كنت في حاجة إلى بيانات استدعاء أسلوب التعبئة. يتم تعبئة بيانات ومن ثم يمكنك أن تبدأ العمل مع البيانات، قطع الآن من DB.

ونأمل أن يساعد، برونو فيغيريدو http://www.brunofigueiredo.com

إليك مثال سريع من استخدام datareader:

            Dim cmd As New OleDb.OleDbCommand(sql, Conn) 'You can also use command parameter here
            Dim dr As OleDb.OleDbDataReader
            dr = cmd.ExecuteReader

            While dr.Read

          ‘Do something with data
          ‘ access fields
          dr("fieldname")
          ‘Check for null
          IsDBNull(dr("fieldname"))

            End While

            dr.Close()

في صافي، وهناك طرق عديدة للقيام بذلك. واحد أن أحب هو استخدام DataReader، التي يمكن أن تعود سجلات متعددة. يمكنك حلقة من خلال سجلاتها باستخدام بينما DataReader.Read.

واحدة من مزايا استخدام DataReader هو أنه كائن، للقراءة فقط فقط إلى الأمام، حتى انها سريعة وخفيفة الوزن.

لتسمح للمستخدم التنقل من خلال كافة السجلات، واحدة في كل مرة، كنت لا ترغب في عقد DataReader مفتوح بينما يتنقل المستخدم. يمكنك أن تقرأ سجلات DataReader إلى الكائنات. أو، يمكنك استرجاع السجلات إلى DataSet، وعرض DataRows من DataTable واحد في وقت واحد.

وأود أن أقترح أنه إذا أمكن ذلك، يمكنك استرجاع كافة السجلات في وقت واحد إذا كان هناك ليست كثيرة جدا. هذا سيوفر دعوات متكررة إلى قاعدة البيانات.

من ناحية أخرى، إذا كان هناك الكثير من السجلات، هل يمكن استرداد القليلة الأولى (مثلا، 10 أو 20) واسترجاع فقط المجموعة التالية من السجلات مع استدعاء قاعدة بيانات جديدة إذا نقر المستخدم خارج مجموعة أولية . هذا هو تحميل كسول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top