تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الثالث والستون - عالم ADO.net وما يتعلق به - الجزء الثالث
#7
Asynchronous Data Access :

في هذه الجزئية سنحاول تعلم طريقة تمنعنا من عمل عدة عمليات على قواعد البيانات في نفس الوقت لمنع التضارب ، ومع ان المشكلة ستواجهنا بصورة اكبر في الوضع المنفصل Disconnected والذي هو موضوع درسنا القادم ، إلا اننا سنجرب الحل في هذه العجالة السريعة ، جرب المثال التالي :

C#:

كود :
[SIZE=3]SqlConnection cn = new SqlConnection();
cn.ConnectionString =
@"Data Source=(local)\SQLEXPRESS;Integrated Security=SSPI;" +
"Initial Catalog=AutoLot;Asynchronous Processing=true";
cn.Open();[/SIZE]


vb.net:

كود :
[SIZE=3]Dim cn As New SqlConnection()
cn.ConnectionString = "Data Source=(local)\SQLEXPRESS;Integrated Security=SSPI;" + "Initial Catalog=AutoLot;Asynchronous Processing=true"
cn.Open() [/SIZE]


أول خطوة قمنا بها هي تعريف الوضع Asynchronous Processing=true في ال ConnectioString بهذه الطريقة اصبحنا قادرين على الاستفادة من الدوال التالية :

BeginExecuteReader() و EndExecuteReader()
BeginExecuteNonQuery() و EndExecuteNonQuery()
BeginExecuteXmlReader() وEndExecuteXmlReader()


سنجرب الآن على BeginExecuteReader و EndExecuteReader ، وسنبدأ بتأخير جملة الاستعلام الأولى لخمس ثوان مثلاً :
c#:

كود :
[SIZE=3]string strSQL = "WaitFor Delay '00:00:05';Select * From Employee_info";
SqlCommand myCommand = new SqlCommand(strSQL, cn);[/SIZE]

vb.net:

كود :
[SIZE=3]Dim strSQL As String = "WaitFor Delay '00:00:05';Select * From Employee_info"
Dim myCommand As New SqlCommand(strSQL, cn) [/SIZE]


هنا سنقوم بتنفيذ عمليات أخرى على ثريد آخر :
c#:

كود :
IAsyncResult itfAsynch;
itfAsynch = myCommand.BeginExecuteReader(CommandBehavior.CloseConnection);
vb.net:


كود :
[SIZE=3]Dim itfAsynch As IAsyncResult
itfAsynch = myCommand.BeginExecuteReader(CommandBehavior.CloseConnection)[/SIZE]


وتنفيذ بعض العمليات حتى الانتهاء من تنفيذ الثريد
C#:

كود :
[SIZE=3]while (!itfAsynch.IsCompleted)
{
// تغيير قيمة مؤشر مثلاً .
Thread.Sleep(1000);
}[/SIZE]

vb.net:


كود :
While Not itfAsynch.IsCompleted
' تغيير قيمة مؤشر مثلاً .
Thread.Sleep(1000)
End While


الآن بما أننا خرجنا من ال Loop السابقة فهذا يعني انتهاء التنفيذ الأول ، الآن سنقوم بتنفيذ العملية التي نريدها .
C#:

كود :
[SIZE=3]SqlDataReader myDataReader = myCommand.EndExecuteReader(itfAsynch);
while (myDataReader.Read())
{
MessageBox.Show(myDataReader[1].ToString());
}
myDataReader.Close();[/SIZE]


vb.net:

كود :
[SIZE=3]Dim myDataReader As SqlDataReader = myCommand.EndExecuteReader(itfAsynch)
While myDataReader.Read()
MessageBox.Show(myDataReader(0).ToString())
End While
myDataReader.Close()[/SIZE]


فقط !
تبقى نقطة واحدة قبل انهاء وضع ال Connected وهي نقطة ال Transactions ، وهي ما سنتحدث عنه لاحقاً .
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
الدرس الثالث والستون - عالم ADO.net وما يتعلق به - الجزء الثالث - بواسطة Raggi Tech - 14-10-12, 09:14 PM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم