Archive

Archive for the ‘Dot Net Memo’ Category

شرح الشجرة Treeview

March 8th, 2010 No comments

السلام عليكم ورحمة الله وبركاته ,سأشرح هنا كيفية عرض بيانات فى اداة TreeView  من قاعدة البيانات فى برمجة الويندوز ,يمكنك ان تحصل على المعلومات باستفاضة وبعدة طرق مختلفة للحل اذا بحثت فى جوجل عن “populating Treeview from database” او “filling Treeview from database” ,عموما سأشرح الفكرة العامة ومثال بسيط .

الفكرة العامة فى نظام ال Treeview  هو فكرة شجرة العائلة بالظبط ,فجدك هو اب لابيك وابوك هو ابن لجدك واب لك ,وابوك وعمك ابناء لجدك وابناء عمك على نفس المستوى مثلك ولكن لابيهم .

كما بالشكل:

Treeview conceptالشجرة

اذا كل ما علينا هو الآتى ,فى قاعدة البيانات يجب ان يكون هناك عنصر ما اب مثلا primary Key او field Parent  للمجموعات تحته Foriegn key او chiled Field ,مثال على ذلك العلاقة بين جدول انواع البضاعة والبضاعة فى قاعدة بيانات Northwind  بين جدولى Categories  و Products ,فتحت كل صنف Category هناك منتج Product ,

سأقوم باللآتى :

سأقوم بعمل جملة استعلام Query  لاحضر كل الاصناف ,اسمائها وارقام مفاتيحها من جدول الاصناف ,ثم سأحضر اسماء المنتجات ومفاتيح اصنافها ,واضع هذين الاستعلامين فى داتاست واقوم بعمل علاقة Relation  بينهم بين عمود CategoryID فى جدول الاصناف ونفس العمود فى جدول المنتجات .

بعد ذلك ساقوم باضافة كل صنف على انه Parent Node  فى ال TreeView  ثم اقوم بعمل Loop على كل ابن لكل صنف واضيفه ك Child node  واليكم الكود:


SqlConnection con=new SqlConnection("server=.;database=northwind;integrated security=true;");</pre>
SqlDataAdapter dap;
DataSet ds = new DataSet();
dap = new SqlDataAdapter("SELECT dbo.Categories.CategoryName,dbo.Categories.CategoryID FROM dbo.Categories",con);
dap.Fill(ds, "Categories");
dap = new SqlDataAdapter("SELECT dbo.Products.ProductName,dbo.Products.CategoryID FROM dbo.Products", con);
dap.Fill(ds, "products");
DataRelation dr = new DataRelation("procat", ds.Tables["Categories"].Columns["CategoryID"], ds.Tables["products"].Columns["CategoryID"]);
ds.Relations.Add(dr);
foreach (DataRow  prow in ds.Tables["categories"].Rows)
{
TreeNode tn = new TreeNode(prow[0].ToString());
treeView1.Nodes.Add(tn);
foreach (DataRow  crow in prow.GetChildRows(dr))
{
tn.Nodes.Add(crow[0].ToString());
}

Categories: Dot Net Memo

شرح الويب سيرفيس,المختصر المفيد

February 24th, 2010 No comments

Web Service او خدمة الويب هى عبارة عن برنامج قادر على التعامل مع البيانات عبر الشبكة مثل الشبكة المحلية او الانترنت باستخدام تقنيتين مفتوحتى المصدر هما SOAP و XML, سأقوم بشرح كيفية عمل Web Service باستخدام تقنية Dot Net.

مع صدور Dot Net 3.0 أصبح هناك نوعان من الويب سرفيس .

  1. ASP.NET Web Service.
  2. Windows Communication Foundation (WCF).

سأتكلم عن ال ASP.NET Web Service  .

من أجل ان تعمل الويب سرفيس ستحتاج الى سرفر عليه IIS وسنكتفى هنا بالسرفر المحلى الذى يمكن ان نقوم بتنصيب ال IIS عليه من اسطوانة اكس بى او ما بعده (لن اتكلم عن اعداد ال IIS  فى ويندوز فيستا او ويندوز سبعة).

يمتاز استخدام الويب سرفيس بالآتى :

  • تناقل البيانات عبر منفذ 80 بسهولة عبر الانترنت والشبكة المحلية .
  • تستخدم الويب سرفيس تقنية ال XML  وهى مدعمة من قبل جهات عدة .
  • سهولة دمجها فى العديد من البرامج وسأعطى مثال بسيط هنا عن كيف ان الويب سرفيس تحل بعض المشاكل التى تواجهنا فى بيئة العمل ومثال ذلك استخدام InfoPath  ,فاذا كنت استخدمت ال InfoPath  لعلك واجهت مشكلة فتح ال Form فى البداية لان ال InfoPath  يقوم بجلب البيانات من قاعدة البيانات كلها بدون عمل فلترة لانه يعتمد على View  وال View  لا يمكن ان تقبل متغيراتParameters  حتى الآن ,ونقوم بحل هذه المشكلة عن طريق جعل مصدر بيانات ال InfoPath  هو Web Service  ونعطى المتغيرات لهذه الويب سرفيس .

لنفهم اولا بعض التقنية التى تعتمد عليها Web Service  .

SOAP هى اختصار ل Simple Object Access Protocol وهو نظام Protocol للتعامل مع البيانات فى صورة XML عبر بروتوكولى HTTPو HTTPs, لن نتعامل معه مباشرة فالدوت نت يتعامل معها ذاتيا.

WSDL وهو اختصار ل Web Service Description Language وهى لغة تستخدم لكتابة تعريف لل Web service فى صورة XML وخصوصا هى تعرفنا بعنوان الWeb Service و الادوات التى توفرها لنا هذه الخدمة methods للتعامل معها, لن نقوم بكتابتها يدويا فالفجوال ستوديو يقوم بانشاءها ذاتيا.

UDDI وهى اختصار Universal Description Discovery and Integration وهو يسمح لنا بعمل مكتبة للويب سرفيس ليتم استخدامها فيما بعد كفهرس للخدمات التى نقدمها.

بناء ويب سرفيس بلغة VB.NET باستخدام Visual Studio 2008 :

  • قم بفتح الفجوال ستوديو ومن قائمة File  اختر Create Website  .
  • من نافذة New Website  اختر ASP.NET Web service   واكتب اسمه webserviceDemo. هل نوعه HTTP ولا FileSystem  الامر يرجع الي كيفية التعامل مع هذه الويب سرفيس ,فاذا كنت ستتعامل معها على جهازك فقط فسيكفيك ان تكون من نوع FileSystem اما اذا كنت ستتعامل معها عن طريق الشبكة المحلية فاختر من نوع HTTP.
  • نلاحظ وضغ ملف service.vb فى الApp_code  و وضع ملف service.asmx  فى المشروع ,حيث service.asmx  هى صفحة ال Web service  اما service.vb فتعتبر هى صفحة Code Behind  للخدمة والتى سنكتب فيها الكود.
  • نلاحظ انه تم وضع كود بسيط فى صفحة service.vb .
  • نلاحظ وجود <WebMethod()> _ وهو تاج واجب الوجود لجعل ال Method Exposed  اى متاحة ,فاى Method  بدون <WebMethod()> _ لن تكون متاحة مباشرة للعميل الذى سيستخدم Webmethod  اى اننا نستخدم <WebMethod()> _ لجعلها متاحة للعميل .
  • ايضا هناك Namespace  يمكننا تغيير ال Namespace  التلقائى http://tempuri.org/ الى ال NameSpace  الخاص بنا وهو الدومين الخاص بنا ,لن يغير هذا من عمل الويب سيرفيس ,ولكنه يفيد فى حالة وجود استخدام اكتر من Method  يستخدمهم العميل بنفس الاسم فسيتم معرفة الفارق عن طريق هذا ال Namespace.
  • سنقوم بحذف هذا الجزء


Public Function HelloWorld() As String

Return "Hello World"

End Function

  • ونقوم بكتابة الخاصة بنا ولتكن مثلا كالتالى :


Public Function CalcSum(ByVal first As Decimal, ByVal last As Decimal) _As Decimal

Return (first + last)

End Function

  • يمكننا تجربة ال WebService  مبدأيا بالذهاب الى Solution  وعمل ضغطة بزر الفأرة اليمين على ملف service.asmx  وعمل browse .
  • نكتب Method  اخرى تطلب مننا رقم الOrder  فى جدول Orders  الموجود بقاعدة بيانات  Northwind  وترجع لنا البيانات عن هذه الطلب


<WebMethod()> _

Public Function order(ByVal orderid As Integer) As System.Data.DataSet

Dim con As New SqlConnection("server=.;database=northwind;integrated security = true;")

Dim com As New SqlCommand("select * from orders where orderid=@orderid", con)

com.Parameters.AddWithValue("@orderid", orderid)

Dim da As New SqlDataAdapter(com)

Dim ds As New System.Data.DataSet

da.Fill(ds)

Return ds

End Function

الآن نريد تجربة ما قمنا بعمله من Methods  وعمل Consumption  لهم.

  • نصنع مشروع Window Application  ونسميه مثلا WinConsumption .
  • نضغط على ملف المشروع فى Solution Explorer  ضغطة بالفأرة يمين ونختار Add service reference .
  • نضع عنوان الويب سرفيس وفى حالتنا http://localhost/demowebservices/Service.asmx
  • ونضغط على Go
  • نضغ Namespace  لها ولتكن مثلا Myservice  .
  • الآن نريد استهلاك السرفيس داخل المشروع نصنع واجهة كما بالشكل

interface

  • نستخدم Namespace  Imports Webconsumption.myservice وهو الخاص بالويب سرفيس .
  • وهذا هو الكود


Public Class Form1

Dim myserv As New Webconsumption.myservice.ServiceSoapClient

Private Sub btncalcsum_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btncalcsum.Click

MessageBox.Show(myserv.CalcSum(txtlast.Text, txtfirst.Text))

End Sub

Private Sub btnshoworder_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnshoworder.Click

Dim ds As New Data.DataSet

ds = myserv.order(txtorder.Text)

DataGridView1.DataSource = ds.Tables(0)

End Sub

End Class

ملف المشروع

Categories: Dot Net Memo

تخزين ListItems فى Session

January 28th, 2010 No comments
السلام عليكم ورحمة الله وبركاته ,اذا كنت تبحث عن كيفية تخزين وحدات الListItems  فى Session فاليك الحل ,يمكنك أن تقوم بتخزين الاشياء Obejcts ف Sessions فببساطة ستقوم بتخزين ItemCollection  وهى عبارة عن مجموعة ال Items الموجودة ب ListItems  فى Session  ثم انشاء متغير من نوع ListItem  وعمل Loop  على Session  واضافته فى صفحة اخرى
//للتخزين
Session("listItems") = ListBox1.Items
//للقراءة
Dim li As ListItem
For Each li In Session("listItems")
ListBox2.Items.Add(li)
Next
Categories: Dot Net Memo