d 3 يناير، 2018 – الصفحة 21 – مدونة الفريق

اليوم: 3 يناير، 2018

  • طريقة نقل بيانات من ملف Excel إلى قاعدة البيانات



    لنفترض أن لديك بيانات مخزنة في ملف إكسل وتريد نقلها إلى قاعدة البيانات …الطريقة سهلة وبسيطة

    1- ليكن ملف الإكسل التالي هو الملف الذي تريد نقل بياناته إلى قاعدة البيانات

    2- يجب في البداية أن تقوم بالاتصال بملف الإكسل لقراءة بياناته وتخزينها في Data Table   وسيكون بالطريقة التالية :

     

    Dim strConn As String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("../db/Book1.xls") & ";" & _ "Extended Properties=Excel 8.0;"
    Dim myCommand As OleDbDataAdapter = New OleDbDataAdapter("SELECT * FROM [Sheet1$]", strConn)
    Dim dt As DataTable = New DataTable()
    myCommand.Fill(dt)

    ولا تنسى أن تستورد مجال الأسماء Imports System.Data.OleDb  

    وأيضا يجب أن تضع $ بعد اسم صفحة الإكسل وهي هنا sheet1 وذلك لأنها ليست اسم جدول

    3- الآن سيتم نقل بيانات الإكسل من ال Data Table التي تم تخزينها فيها إلى الجدول الخاص بها في قاعدة البيانات ولنفترض أنه باسم Users:

    Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("connstr").ConnectionString)
    Dim cmd As SqlCommand = conn.CreateCommand
    conn.Open()
    For i As Integer = 0 To dt.Rows.Count – 1
    cmd.CommandText = "insert into Users (userid,username) values(@userid,@username)"
    cmd.Parameters.AddWithValue("@userid", dt.Rows(i)("userid"))
    cmd.Parameters.AddWithValue("@username", dt.Rows(i)("username"))
    cmd.ExecuteNonQuery()
    cmd.Parameters.Clear()
    Next
    conn.Close()
    End Using
     

    وهكذا نكون قد انتهينا

  • بعض تصاميم المواقع المتجاوبة الجميلة

    استكمالا لففرة منير بركات حول تصميم الويب التفاعلي Responsive Web Desigen أضع لكم بعض المواقع الجميلة والجذابة

    أو بالأحرى ، بعض المواقع التي ستصدمك

    25 Beautiful Responsive Web Design Examples for Inspiration

    30 Example

    60 Examples of Responsive Website Design

    60+ Creative Examples of Responsive Web Design

    24 Excellent Examples of Responsive Web Design

  • هل انتهيت من برمجة موقعك ب ASP.NET وتريد فحص قبل نشره ؟

    عند الإنتهاء من برمجة موقع ، والتأكد من أن البرمجة لا تحتوي على أخطاء ، تحتاج لعمل مراجعات عديدة وهامة، مثلا توافقه مع محركات البحث، وجود روابط لا تعمل، دعمه للجوال وغيرها من هذه المراجعات والفحوصات الهامة ، ولكن من أين يبدأ المبرمج الغلبان ؟

    الإجابة من هذا الموقع
    http://webdevchecklist.com/asp.net/

    فكرة الموقع بسيطة ، وبالتأكيد ستعجبك وستعرف كيف تستخدمه

    بالتوفيق لكم

  • CheckBoxList Validation


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

    عندما تريد إجراء تحقق من أداة CheckBoxList فإن الأمر لن ينجح معاك بالشكل المطلوب
    ، والحل بسيط جدا : ألا وهو استخدام أداة خاصة لهذا الغرض . وقد قمت بإرفاقها لكم
    على هذا الرابط
    CheckBoxListValidator

    قم باستدعاء الأداة في قائمة الأدوات ، ثم  اسحب الأداة واستخدمها كأي أداة
    تحقق عادية
    بالتوفيق للجميع

  • حفظ WindowsForm  في صورة وطباعتها

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

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

    بداية الأمر، استخدمنا شيفرة طباعة الشاشة، ومن ثم قمنا باقتصاص حجم الForm منها في صورة كالتالي

    Code

    Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height) ‘ تحديد أبعاد الشاشة
    Dim screenCut As New Bitmap(Width, Height) ‘ تحديد أبعاد الصورة حسب أبعاد الفورم
    Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenCut) 
    g.CopyFromScreen(New Point(Location.X, Location.Y), New Point(0, 0), ScreenSize) ‘ حفظ الشاشة وتخزينها حسب بداية الفورم
    screenCut.Save("C:\mainimg.jpg", System.Drawing.Imaging.ImageFormat.Jpeg) ‘ حفظ الصورة

    الفكرة بسيطة وهي أن نقوم بطباعة كاملة للشاشة ، ثم نقوم باقتطاع صورة منها وتكون بداية هذه الصورة في نقطة بدء الForm وذلك عبر Location.X, Location.Y ومن ثم نحدد نقطة نهاية الصورة عبر طول وعرض النموذج الحالي، وأخيرا حفظ الصورة.
    تبقى قضية واحدة وهي تحديد أبعاد الصورة حسب أبعاد الطباعة المرادة، وذلك للحصول على أفضل أداء، وهنالك عدة طرق لهذا الأمر وأبسطها كالتالي

    Code

    Dim source As Image = Bitmap.FromFile("C:\screenCut .jpg")
    Using dest As New Bitmap(source, (source.Width + source.Width), (source.Height + source.Height))
    dest.Save("c:\newimg.jpg")
    End Using

    حيث يتم جلب الصورة الأولى وثمن ثم مضاعفة أبعادها بجمعها لنفسها مرة أخرى وذلك مثل الضرب في 2، ويمكن إضافة أي تمدد للصورة وذلك بالضرب في الرقم الذي ترغب به ، فمثلا أبعاد الصورة 300*300 ونحن نريدها 450*450 ، وهنا يجب ضرب الطول ب1.5 وكذلك العرض بنفس القيمة وهكذا.
    وما قمنا به هو نسخ الشاشة، ومن ثم اقتطاع النموذج منها، ومن ثم التحكم في أبعاد الصورة

    وفق الله الجميع

  • إضافة جافاسكريبت في حدث النقر على وسم كائن

    العنوان يبدو ملخبط نوعا ما، ولكن للتوضيح، لديك  كائن فلاش embed أو غيره، وتريد
    إضافة تعليمة جافا سكريبت في حدث النقر على الفلاش، مثلا فتح نافذة جديدة، هنالك خدعة
    بسيطة لعمل هذا الأمر وهي كالتالي:
    1- بعض المتصفحات لن تدعم الحدث onclick لذلك سنستخدم الحدث : onmousedown
    2- يجب وضع الخاصية wmode إلى transparent والخاصية allowscriptaccess إلى true

    وهذا مثال على ذلك

        <div onmousedown="javascript:window.open('http://www.tkfithat.com/Details.aspx?depid=166');"
    style="text-align: center; vertical-align: middle"> <embed wmode="transparent" allowfullscreen="false"
    allowscriptaccess="always" height="136" type="application/x-shockwave-flash"
    pluginspage="http://www.macromedia.com/go/getflashplayer" width="300"
    src="http://www.3orod.com/ImagesStore/AdsMedia/201102161044541826936843.swf"
    quality="high" wmode="transparent" />
    </div>

     

    وهنا قمت بجعل الكود يفتح صفحة جديدة عند النقر على كائن الفلاش، وهذا الفكرة الأساسية
    ، تستطيع الاستزادة مثلا بتخصيص نفس هذه الخصائص للوسم <object> هنا وضعت الوسم
    <embed> على سبيل المثال.

  • أفضل طريقة لتعلم لغة برمجة واحترافها

    أتعرف …أعتقد أنه عند قراءتك للعنوان …. للوهلة الأولى سيتبدى في ذهنك السؤال التالي: هل فعلا هناك طريقة جيدة ومثالية لتعلم لغة برمجة وأيضا احترافها؟؟

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

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

    الآن أخبرني :

    إن كان لديك الرغبة في تعلم أمر معين في الحياة…مثل تعلم اللغة الإنجليزية أو قيادة السيارة أو تصليح الأجهزة الكهربائية وغيرها…ماذا تفعل ؟؟

    الجواب بسيط وأنت تعرفه جيدا …. ستخبرني بأنك ستقرأ كتبا عن الأمر الذي تريد تعلمه وبعدها ستحاول تطبيق ما قرأته لإتقانه يعني إن أردت تعلم اللغة الإنجليزية ستقوم بتعلم قواعد اللغة ومعانيها لكي تستطيع تكوين الجمل وبعد ذلك التحدث بها وبالاستمرار في ذلك ستحترف اللغة وستتكلم بها بطلاقة

    إذا…أنت تعرف الطريقة التي بها يمكنك تعلم لغة برمجة واحترافها….فتعلم لغة برمجة ستكون بنفس الطريقة التي تتعلم بها أي أمر آخر في حياتك.

    في البداية ستقوم بالبحث عن أفضل اللغات والتي تحمل الكثير من المزايا والإمكانيات الرائعة والتي ستلبي احتياجاتك في الحياة العملية. ولن أخبرك بها فيجب أن تقوم باكتشافها بنفسك لأنك في النهاية ستعتبرها وجهة نظر مني لا أكثر.أنت لديك عقل وتستطيع التفكير وبناء على قراءتك لمساوئ ومميزات كل لغة ستقرر أي لغة الأفضل لك .

    الآن لديك اللغة التي تريد تعلمها ولديك الرغبة القوية لذلك وأنا أؤكد على الرغبة كثيرا لأنه بدونها لن تكمل مشوارك في التعلم

    ستقوم بعد ذلك بقراءة كتب لتعلم قواعد اللغة ولا تقم بالقراءة كأنك تقرأ قصة أو مجلة للتسلية ولكن يجب عليك القراءة وتطبيق ما تقرأه بالموازنة فما نقرأه ننساه بسرعة ولكن ما نطبقه عمليا يظل محفورا في أذهاننا

    واعلم أن جميع لغات البرمجة بغض النظر عن محاسنها ومساوئها تعتمد على نفس الأساسيات ونفس المفاهيم ولكن تختلف في طريقة كتابة الأمر البرمجي فعلى سبيل المثال إن أردت حجز متغير في الذاكرة لتخزين أرقام صحيحة بداخله بلغة الفيجوال بيسك دوت نت فالأمر سيكون كالتالي

    Dim x as integer

    ويتم كتابة نفس الأمر بلغة السي شارب بهذه الطريقة

    Int x;

    والأمر متشابه عند باقي لغات البرمجة وقس هذا الأمر على غيرها من الأوامر البرمجية..

    من هنا نستنتج أنك بتعلم لغة برمجة …تستطيع الانتقال بسهولة إلى أي لغة أخرى

    وبعد انتهائك من تعلم قواعد اللغة…لا تظن أنك أصبحت خبيرا وأنك تستطيع البرمجة بكل سهولة ولا أقول لك ذلك لكي أحبطك أو أجعلك تيأس بالعكس فغرضي أن أبين لك الحقيقة لأنني إن لم أخبرك بذلك ستكتشف ذلك بنفسك ولن تصدقني وستظن بأنني أقوم بسرد نصائح عابرة لا أساس لها من الصحة

    فيجب عليك أن تختلق برنامج من نسج خيالك وتقوم ببرمجته لكي تستعمل كل ما تعلمته فيه…هنا ستواجهك المشاكل والصعوبات…وسيكون عليك أن تتحلى بالصبر والمثابرة لصمودك وعدم تخليك عن النجاح الذي تريد الوصول إليه…توكل على الله وأعلم أن الله لا يضيع تعب أحد على الإطلاق

    سيتطلب منك البحث كثيرا عبر الإنترنت لحل مشاكلك وهو أفضل مرجع لك للوصول إلى ما تتمناه ولا عيب بأن تطلب المساعدة بمن هو أكثر خبرة منك ومع حل كل مشكلة ستكتسب معرفة جديدة وبالمداومة على ذلك ستصبح خبيرا وسترى نتائج تعلمك.

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

    وأروع أمر هو بدون أدنى شك رؤيتك لنجاحك بعد تعبك وجهدك الذي استمر وقتا طويلا…ستغمرك السعادة والفرح عند انتهاءك من برنامج قد أخذ منك وقتا وجهدا كبيرا

    ترى أنت تتساءل لماذا أتكلم بهذه الثقة الكبيرة وكأنني مررت بهذه التجربة…أقول لك نعم..

    أنا أتكلم من تجربتي الشخصية التي مررت بها …وإلى الآن أتعلم أمورا جديدة في حياتي…فنحن مهما تعلمنا ستظل أمورا كثيرة لا نعرفها وسنظل نتعلم إلى الأبد.

    ومن يريد التعلم يبدأ من اليوم ولا يؤجل ذلك للغد وتمنياتي بالتوفيق لكل من سيبدأ باكرا

     

  • Auto-Implemented Properties جديد في منصة الدوت نت 4.0

    استكمالا لسلسة مقالات الجديد في منصة دوت  نت 4.0 سنقوم اليوم بالتطرق لميزة Auto-Implemented Properties الجديدة في منصة الدوت نت 4.0.

    في الإصدارات السابقة من الدوت نت تطلب الأمر منك إذا أردت أن تعرف خاصية Property  أن تعرفها بالشكل العام كالتالي:

    Code

    Private _name As String = "developers.ps"
    Property Name As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

    حيث يتوجب أن يكون متغير خاص يتم تخزين به البيانات للتغليف ومن ثم إنشاء جسم الخاصية عبر الدالتين Set , Get  ومن ثم كتابة اللزم بهما.
    غالبا ما نقوم بإنشاء خصائص كما بالمثال بدون الإضافة عليها أي شيفرات برمجية أخرى، لذلك قامت مايكروسوفت بتسهل الأمر وعمله كالتالي:
    Code

    Property Name As String = "developers.ps"
    Property Age  As Integer = 2
    Property Employees As New List(Of Person)(12)

    الذي حصل هنا هو أن الدوت نت قامت بإنشاء المتغير الخاص في الخلفية وهو يحمل نفس اسم الخاصية بالإضافة للشرطة السلفية ، وأيضا يحمل نفس النوع ، ودليل على كلامي قم بمحاولة تعريف متغير خاص يحمل نفس اسم الخاصية ونفس نوعها واسمه يبدأ بالشرطة السفلية،وستجد أن إشارة الخطأ ستظهر لك .
    بإمكانك أن تنشئ الخاصية ReadOnly أو WriteOnly بنفس الطريقة أيضا، ولو أردت أن تفصل في جسم الخاصية وتضيف ما تريد إضافته ما عليك إلا كتابة كلمة Get أو Set  في السطر التالي للخاصية وستجد أن الفيجوال ستوديو يكملها عنك.

    تسهيل جديد من مايكروسوفت على المطورين ، وخطوة جيدة من قبلهم

    وفق الله الجميع

  • احمي موقعك من تغرة XSS

    احمي موقعك من تغرة XSS

    رغم أن ثغرة XSS تعتبر ثغرة قديمة، إلا أنها قد شاعت في هذه الأيام XSS حتى أنها أصبحت كابوسا كبيرا لكثير من المواقع والبرمجيات الجاهزة كالمنتديات وما شابه، وهنا سأطرح الحلول المقترحة لهذه المشكلة في الدوت نت بإذن الله.
    بداية، ما سأقوم بعرضه يكفي فقط للدوت نت الإصدار 1.1 وما بعده مثل الإصدار 2.0 وأما بخصو ص الإصدار 1.0 فتوجد حلول أخرى لحل هذه الثغرة وهو ما لن أهتم به لأن من يستخدم الإصدارات القديمة كان الواجب عليه أن يواكب التحديثات.
    إن هذه المشكلة تظهر عند مناطق إرسال البيانات، فمثلا لدي صفحة بها صندوق نصي وأقوم عبرها بإرسال البيانات للخادم ، فقام شخص ما بكتابة الجملة التالية:

    Code

    <script>alert(‘some malicious code’);</script>

     

    وهذا وسم جافا سكريبت يظهر رسالة، وليست الخطورة في هذا الوسم ولكنها تكمن في إمكانية إرسال وسوم أخرى عديدة شأنها تغيير عمل الصفحة بالكامل.
    الحل يكمن في أن نقوم بمنع إرسال هذه الوسوم  للخادم ، وإذا كانت الصفحة تحتاج لإرسال قيمة بالرابط QueryString يجب فحصها في الصفحة التالية لها ( صفحة قراءة البيانات ).
    لتلافي منع إرسال وسوم خطيرة إلى يتوجب عليك أن تقوم بتفعيل فحص المدخلات عبر الخاصية ValidateRequest=”true”  في الصفحة في أول سطر بها.

    وهذه الخاصية جديدة في الإصدار 1.1 وما بعده وهدفها فحص مدخلات الصفحة المرسلة، فإذا وجد أن هنالك وسوم ممنوعة ، سوف يقوم الخادم برمي خطا من نوع HttpRequestValidationException وهو ما يمكنك أن تقوم بفحصه عبر الملف Global.asax في ححدث الخطأ ، وتقوم بإطهار رسالة أو صفحة خاصة له تخبره مثلا ، بأن هذا الأمر ممنوع ، أو عار عليه إذا رغبت بذلك .

    أو أن تقوم بتفعيلها  في ملف الإعدادات Web.Config  في وسم الصفحة validateRequest=”true”، مع العلم أن هذا هو القيمة الإفتراضية لهذه الخاصية هي true ، بمعنى إن لم تكن قد غيرتها فلا تقوم بفعل شيء.

    الأمر الآخر هو عند إرسالك لبيانات من صفحة إلى أخرى ، عليك أن تقوم بإستدعاء الدالة Server.HtmlEncode() عند الإرسال ، وعند استقبال البيانات عليك قراءتها عبر الدالة Server.HtmlDecode()، أو مثلا أن تستقبل البيانات من ويب سيرفس أو من قاعدة بيانات أخري، على سبيل المثال أنني مثلا أريد أن أرسل اسم المستخدم المكتوب في الصندوق النصي لصفحة أخرى كالتالي

    Code

    Response.Redirect(“login.aspx?username=” & Me.TextBox1.Text)

    فإنه يتوجب إضافة الدالة بالشكل التالي

    Code

    Response.Redirect(“login.aspx?username=” & Server.HtmlEncode(Me.TextBox1.Text))

    وعند قراءة البيانات في الصفحة الثانية أن تقرأ بالشكل التالي

    Code

    Dim uname As String = Server.HtmlDecode(Request.QueryString(“username”))

    أما بخصوص الإصدار 1.0 فإنه توجد بعض الحلول الفعالة مثل استخدم Reqular Expression  في فحص المدخلات أو القيم المرسلة ، أو بطريقة بسيطة وغير دقيقة استبدال الوسوم بالقيم المشابهة لها من ال HTML

    بالتوفيق للجميع

    (المزيد…)

  • كيفية ربط موقعك مع برنامج أو مع عدة مواقع

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

    ولكن …لعل البعض يتساءل ، ما الهدف من ربط الموقع بالبرنامج ؟!

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

     

    بما أن البرنامج سيقدم نفس الخدمات ( أو جزء منها )  التي سيقدمها الموقع ، فهذا يعني أن قاعدة البيانات ستكون مشتركة بين الاثنين ( أو جزء منها ) ، ولتفرض أن الموقع هو صاحب القاعدة الأساسية ، والبرنامج هو الجزء المستفيد من هذه القاعدة ، وهي مرفوعة على الإنترنت

    سيكون الحل كالتالي : سنقوم بعمل دالة عادية ولكن سنقوم بوضعها في منطقة خاصة وبمواصفة خاصة (Attribute) ، وسنقوم باستدعائها من البرنامج.

    سيتم إضافة جميع الدوال التي نحتاجها في ويب سيرفس (web service)  وبعدها نستدعيها في البرنامج ، وهذا الأمر يتم بالشكل التالي

    ، سنقوم بإضافة ويب سيرفس وذلك بالنقر بالزر الأيمن للماوس على اسم الموقع من قائمة.Solution Explorer ونختار add New item ومن ثم نختار web service

    وبعدها سنقوم بكتابة جميع الدوال التي سنحتاجها على أن يسبق كل دالة _<()WebMethod>  ولننظر إلى الدالة التالية على سبيل المثال  وهي لاسترجاع اسم  جهاز الحاسوب ونظام التشغيل المستخدم:_<()WebMethod>

    (المزيد…)