الاتصال بـ Sql Server واستخدام Stored Procedure



- للاتصال بالسيرفر يجب عليك انشاء كائن من الفئة Connection ثم ارفاق نص الاتصال (Connection String) به والذي

يحتوي علي خصائص الاتصال من User Name , Password , .Net Data Provider .


- نص الاتصال Connection String :

يأخذ نص الاتصال الصيغه التاليه في ابسط اشكاله :-
Data Source=myServerAddress;Initial Catalog=myDataBase;User 
Id=myUsername;Password=myPassword;

- في هذا الرابط يوجد مرجع لنصوص الاتصال في اشكال متعدده  

- يمكن ايضا من خلال الفيجوال استديو تحديد نص الاتصال كالتالي
  
  أ - من شريط الادوات بالضغط علي
       Project  ثم اختيار Application proprieties  كما في الشكل الاتي :





































 ب - بعد ذلك نحدد الاختيار Settings ونقوم باضافه القيم كاسم الاتصال في حقل Name واختيار النوع Connection String من 
      حقل Type




جـ -  و عند الوقوف في حقل Value سيظهر button قم بالضغط عليه ليظهر لك مربع كما في الشكل الاتي تقوم من خلاله بتحديد اسم
     السيرفر وقاعده البيانات واسم المستخدم وكلمه المرور ( اذا لم تستخدم تصديق الويندوز ) ثم عمل Test ليظهر لك تأكيد بأن النص 
    يعمل بشكل صحيح انظر الي الشكل الاتي : 




د - بالضغط علي OK سيكون لديك نص الاتصال في حقل الـ Value يمكنك نسخه او ارسال مرجع الـ Application Settings 
    باسم الاتصال المحدد في حقل الـ Name 


- ملحوظه : في حاله استخدام  الخطوات السابقة يكون لديك الان نص اتصال مرفق بالملف  app.config  يمكن تغيره بدون 
  الدخول الي الكود .

- الان سيتم انشاء الاتصال بعد اضافه مرجع الي System.Data.SqlClient

في المثال التالي سنستخدم SQL Server Connection Pooling وهو تكنيك في الاتصال لتقليل عدد مرات  فتح الاتصال 
وبالتالي تقليل الضغط والازدحام علي الشبكه وفي هذا الرابط  مرجع له 


بعد اضافه مرجع الي SqlClient كالتالي :
C#
using System.Data.SqlClient ;
VB
Import System.Data.SqlClient

- الان هذا هو كود الاتصال بـ Sql Server  وتنفيذ الـ Stored Procedure من خلال الكائن sqlcommand : 

-  ملحوظه : سيتم استخدام الـ Stored Procedure المذكور في المثال في هذا الرابط 


----------------------------------------------------------------------------------------------------------------

           using (SqlConnection MyConn = new SqlConnection(connString))
                {

             using (SqlCommand Command = new SqlCommand("SP_UpdataProduct",ConnString))
                    {
                        Command.CommandType = System.Data.CommandType.StoredProcedure;
                        Command.Parameters.AddWithValue("@ProId", Value);
                        Command.Parameters.AddWithValue("@ProName", Value);
                        Command.Parameters.AddWithValue("@ProUnit ", Value);
                        Command.Parameters.AddWithValue("@ProPrice", Value);
                        Command.Connection.Open();
                        Command.ExecuteNonQuery();
                    }
                }
----------------------------------------------------------------------------------------------------------------


SQL Server Stored Procedures

  • تعريف :    -  الـ Stored Procedure هو عباره عن مجموعه من العمليات  (Transact) تخزن في قاعده البيانات كاكائن
                      (Object)  
     بغرض الاستخدام المتعدد , وهو يعتبر برنامج صغير ينفذ داخل قاعده البيانات .


  • يمكن تقسيم  الـ Stored Procedure  كالتالي  :
- التكوين (Composition)
- الوظيفة او الاستخدام (Functionality)
- بناء الجمله (Syntax)


 1- التكوين :
يتكون  Stored Procedure  من :
                                       أ- الرأس header :  وفيه يتم تحديد اسم الاجراء و اسماء المتغيرات (parameters)
                                      ب- جسم الاجراء  body :  وفيه يتم كتابه العمليات (Transact-SQL statements)
- انشاء  Stored Procedure :                                         الان سنري طريقة بناء اجراء داخل قاعده البيانات

------------------------------------------------------------
 CREATE PROCEDURE <Procedure_Name>
--هنا يتم وضع المتغيرات
@Param1
@Param2
AS
BEGIN

    -- هنا يتم وضع العمليات
SELECT @Param1 , @Param2
END
-----------------------------------------------------------
- مثال :
    لدينا Table للمنتجات في قاعده البيانات ويحتوي علي حقول كما في الشكل التالي :
    والمطلوب هو Procedure لاضافه صنف ان كان 
     غير موجود وتحديثه ان كان موجود .





- سيتم انشاء الاجراء كالتالي وقد اعطيته اسم SP_UpdataProduct :


--------------------------------------------------------------------------

CREATE PROCEDURE SP_UpdataProduct

@ProId nvarchar(200) ,
@ProName  nvarchar(250) , 
@ProUnit  nvarchar(50) ,
@ProPrice money

AS
BEGIN
--التاكد من وجود الصنف
--اذا كان الصنف موجود
If exists(Select ProId From Products Where ProId = @ProId)
Begin
-- تحديث الصنف
update Products
Set ProName = @ProName , ProUnit = @ProUnit , ProPrice = @ProPrice
Where ProId = @ProId ;
End
--اذا غير موجود 
Else

Begin
-- ادخال صنف جديد
Insert into Products
(ProId , ProName ,ProUnit , ProPrice)
Values
(@ProId , @ProName , @ProUnit , @ProPrice) ;

End

End

-----------------------------------------------------------------------------
- يتم تعديل الـ Stored Procedure باستخدام كلمه Alter ثم كتابه اسم Procedure

2 - الاستخدام :
 يمكن ان يستخدم  الـ Stored Procedure في : 
                                                            
                          أ - ارجاع المعلومات للمتصل Return information to the caller
                         ب - تعديل البيانات في قاعده البيانات Modify data in databases
                         جـ - تحسين اداء النظام Improve performance of the system
                          د - تقليل الضغط والازدحام علي الشبكه Reduce network traffic

- يوجد 4 طرق لاستقبال المعلومات من  الـ Stored Procedure :

                         أ - ارجاع النتائج Returning result sets
                        ب - استخدام بارمترات المدخلات والمخرجات Input and Output parameters
                        جـ - استخدام القيم المرجعه (المستدعاه) Return values
                        د - المؤشر او الكورسر العام Global cursor

3 - الصياغه او النحو او بناء الجمله :
 فيما يلي نص بناء الجمله Syntax :
-----------------------------------------------------------------------------
CREATE PROG[EDURE] schema. procedure_name [;number]
[
{@parameter schema.data_type} [VARYING] [= default] [OUTPUT]
]
,...n]
[
WITH { RECOMPILE
[ | ENCRYPTION
| EXECUTE AS { CALLER | SELF | OWNER | 'user_name' }
} ] [FOR REPLICATION] AS
sql_statement [...n]

-----------------------------------------------------------------------------.