الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تعبئة Dataset بواسطة Reader ؟؟؟

مغلق
بدأه ابوخالد العيدروس في 12 ديسمبر 2006 · 4 رد · 832 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني اانا اعرف كيف اعبأ Dataset بواسطة DataAdapter ومن ثم ارسالها الى التقرير للعرض ..

ولكني اريد ان اعرف كيف ( الكود ) تعبئة Dataset بواسطة DataReader ومن ثم ارسالها الى التقرير ؟؟

ولكم الشكر والتقدير

#2

السلام عليكم

الطريقة بسيطة, بحيث تعرف DataSet و جدول DataTable و أعمدة إليك ذلك.

Private MainDataSet As New DataSet
	Private TableObj As New DataTable
	Private CustomerID As New DataColumn("CustomerID")
	Private Shadows CompanyName As New DataColumn("CompanyName")
	Private ContactName As New DataColumn("ContactName")

ثم في حدث التحميل نضم الاعمدة إلى الجدول بهذا الشكل.

Private Sub Form1_Load(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles MyBase.Load
		' Add all columns
		TableObj.Columns.Add("CustomerID")
		TableObj.Columns.Add("CompanyName")
		TableObj.Columns.Add("ContactName")
	End Sub

ثم نقوم بتحميل البيانات في الزر Fill بهذا الشكل.

Private Sub btnFill_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles btnFill.Click

		' Create Local connection for the Asynchronous Operation.
		Using cnn As New SqlConnection( _
		"Data Source=.;Initial Catalog=Northwind;Integrated Security=SSPI;Async=True")


			' Create local sqlcommand 
			Using cmd As New SqlCommand("SELECT * FROM Customers", cnn)

				' Open connection object.
				cnn.Open()

				' Declare an interface of IAsyncResult.
				Dim IAS As IAsyncResult = cmd.BeginExecuteReader()

				' Check if no result yet..
				If Not IAS.IsCompleted Then

					' Tell user object still busy..
					lblResult.Text = " Still executing, please wait.."
					Me.lblResult.Refresh()
				End If


				' Create local sqlReader object.
				Using rdr As SqlDataReader = cmd.EndExecuteReader(IAS)


					' Add all rows to the available columns.
					While rdr.Read
						Dim row As DataRow = TableObj.NewRow()
						row("CustomerID") = rdr("CustomerID")
						row("CompanyName") = rdr("CompanyName")
						row("ContactName") = rdr("ContactName")
					End While

					' Close connection object.
					cnn.Close()

					' Add table to the dataset.
					MainDataSet.Tables.Add(TableObj)

					' Instintiate an object from customersReport class.
					Dim rpt As New CustomersReport

					' Assign dataset as datasource of object report.
					rpt.SetDataSource(MainDataSet)

					' Assign report object to View as source
					CRV.ReportSource = rpt

					' Tell user that report & data loaded successfully.
					lblResult.Text = " Data Loaded Successfully..."
				End Using

			End Using
		End Using
	End Sub

استخدمنا في هذا المثال تقنية جديدة في الـ SQLCommand وهي عملية التزامنية Asynchronous

متطلبات تشغيل المرفق : SQL 2005 + VS.NET 2005 + Northwind Database

بالتوفيق إن شاء الله.

FillDataSetWithDataReaderObject.rar

في المثال يتضح المقال

#3

اخي الغملاسي عندي سؤال مبدئي ..

' Create Local connection for the Asynchronous Operation.
		Using cnn As New SqlConnection( _
		"Data Source=.;Initial Catalog=Northwind;Integrated Security=SSPI;Async=True")

مافائدة Async=True ؟؟

وهل هي خاصة بالـ 2005 ؟؟

بالنسبة للمثال انا اشتغل على 2003 للأسف :( :unsure: !!

تم تعديل هذه المشاركة بواسطة ابوخالد العيدروس في 12 ديسمبر 2006 في 20:15

#4

السلام عليكم

اقتباس
مافائدة Async=True ؟؟

هذه عبارة عن صفة attribute فتكتب اما Async=True أو Asynchronous Processing=true

الفائدة: منها أنها تجعل عنصر الاتصال داعم للعمليات التزامنية Support Asynchronous Operation

اقتباس
وهل هي خاصة بالـ 2005 ؟؟

نعم أخي العزيز هي خاصة للنسخة ADO.NET 2.0

اقتباس
بالنسبة للمثال انا اشتغل على 2003 للأسف

يمكنك تغيير الكود إلى هذا الشكل حتى يعمل على 2003

   Private Sub btnFill_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles btnFill.Click

		' Create Local connection for the Asynchronous Operation.
		Dim cnn As New SqlConnection( _
		"Data Source=.;Initial Catalog=Northwind;Integrated Security=SSPI;")


		' Create local sqlcommand 
		Dim cmd As New SqlCommand("SELECT * FROM Customers", cnn)

		' Open connection object.
		cnn.Open()

		' Create local sqlReader object.
		Dim rdr As SqlDataReader = cmd.ExecuteReader

		' Add all rows to the available columns.
		While rdr.Read
			Dim row As DataRow = TableObj.NewRow()
			row("CustomerID") = rdr("CustomerID")
			row("CompanyName") = rdr("CompanyName")
			row("ContactName") = rdr("ContactName")
		End While

		' destroy objects.
		cmd.Dispose()
		rdr.Close()
		cnn.Close()

		With MainDataSet
			.Tables.Clear()
			.Tables.Add(TableObj)
		End With

		' Instintiate an object from customersReport class.
		Dim rpt As New CustomersReport

		' Assign dataset as datasource of object report.
		rpt.SetDataSource(MainDataSet)

		' Assign report object to View as source
		CRV.ReportSource = rpt

	End Sub

بالتوفيق إن شاء الله.

في المثال يتضح المقال

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…