05-10-12, 09:43 PM
منقول من المنتدى القديم
صاحب الرد أحمد جمال المشرف العام
- تقنية LINQ :
باختصار شديد حولت هذه التقنية العمل على قواعد البيانات إلى برمجة عادية ، حيث يمكنك التعامل مع قواعد البيانات من خلال فئات .net عادية للغاية ، يمكنك معرفة المزيد عن هذه التقنية من خلال هذين الرابطين من المنتدى :
http://vb4arb.com/vb/showthread.php?1224...1#post3540
كمثال سريع يمكن افتراض جملة الاستعلام هذه :
يتم تنفيذها باستخدام اي طريقة ... ليس هذا ما يعنينا ، ولكن تجد ناتج الاستعلام في RS.Fields("FieldName") حيث تستطيع قراءتها ، لعمل استعلام آخر يمكنك القراءة من جديد ، يمكنك عمل Loop عادية للقراءة ومن ثم البحث في الكائن بالطريقة العادية :
كان هذا هو الاختيار المتاح لك للتعامل مع قواعد البيانات ، أما الآن فقواعد البيانات يتم التعامل معها على شكل Clases لها Members و methods و functions ولها Operators خاصة بها ، لنفترض هذا الأمر من داخل ال .net مباشرة .
حيث تجد متغير مباشرة تجد فيه نتيجة البحث، ومن مقال الأخ سامر سلو هذه التجربة لكود حقيقي ، في المرحلة الأولى نجد الكود المبرمج من خلال ADO.net عادية للغاية بدون الإعتماد على تقنية LINQ :
حيث تجد مجموعة من العمليات التي اجبر على عملها اعتماداً على ضعف امكانيات ال DataReader العادية ، أما مع LINQ فهو يتعامل مباشرة من خلال فئات LINQ ، لذا اصبح الكود بالشكل التالي :
مع الشكر للأخ سامرسلو ...
صاحب الرد أحمد جمال المشرف العام
- تقنية LINQ :
باختصار شديد حولت هذه التقنية العمل على قواعد البيانات إلى برمجة عادية ، حيث يمكنك التعامل مع قواعد البيانات من خلال فئات .net عادية للغاية ، يمكنك معرفة المزيد عن هذه التقنية من خلال هذين الرابطين من المنتدى :
http://vb4arb.com/vb/showthread.php?1224...1#post3540
كمثال سريع يمكن افتراض جملة الاستعلام هذه :
كود :
Select companyname from customersيتم تنفيذها باستخدام اي طريقة ... ليس هذا ما يعنينا ، ولكن تجد ناتج الاستعلام في RS.Fields("FieldName") حيث تستطيع قراءتها ، لعمل استعلام آخر يمكنك القراءة من جديد ، يمكنك عمل Loop عادية للقراءة ومن ثم البحث في الكائن بالطريقة العادية :
كود :
Do While(Rs.Read
Console.WriteLine Rs.Fields("CompanyName")
Loopكود :
Dim queryResults = From cust In customers _
Select cust.CompanyNameحيث تجد متغير مباشرة تجد فيه نتيجة البحث، ومن مقال الأخ سامر سلو هذه التجربة لكود حقيقي ، في المرحلة الأولى نجد الكود المبرمج من خلال ADO.net عادية للغاية بدون الإعتماد على تقنية LINQ :
كود :
Private Sub GetWorkingDate()
Try
Using Mocon As New SqlConnection(My.Settings.AccountsConnectionString)
Dim MoCmd As New SqlCommand
Dim MoReader As SqlDataReader
MoCmd.CommandText = "SELECT MAX(WorkingDate) As WoDate From WorkingDate"
MoCmd.CommandType = CommandType.Text
MoCmd.Connection = Mocon
MoCmd.Connection.Open()
MoReader = MoCmd.ExecuteReader
If MoReader.HasRows = True Then
While MoReader.Read
If IsDate(MoReader.Item("WoDate")) = True Then
Me.WorkingDateLbl.Text = Format (MoReader.Item("WoDate"), "dd/MM/yyyy")
Else
Me.WorkingDateLbl.Text = Now.ToString ("dd/MM/yyyy")
End If
End While
Else
Me.WorkingDateLbl.Text = Now.ToString("dd/MM/yyyy")
End If
MoCmd.Connection.Close()
SaveWorkingDate()
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Subحيث تجد مجموعة من العمليات التي اجبر على عملها اعتماداً على ضعف امكانيات ال DataReader العادية ، أما مع LINQ فهو يتعامل مباشرة من خلال فئات LINQ ، لذا اصبح الكود بالشكل التالي :
كود :
Private Sub GetWorkingDateLinq()
Try
Dim ads As New AccountsDataSet
Dim Wdta As New WorkingDateTableAdapter
Wdta.ClearBeforeFill = True
Wdta.Fill(ads.WorkingDate)
Dim Wod = Aggregate Wdt In ads.WorkingDate _
Into Mdt = Max(Wdt.WorkingDate)
Me.WorkingDateLbl.Text = Wod.ToString("dd/MM/yyyy")
Catch ex As Exception
Me.WorkingDateLbl.Text = Now.ToString("dd/MM/yyyy")
End Try
Me.SaveWorkingDate()
End Subمع الشكر للأخ سامرسلو ...
