قواعد المشاركة في المنتدى

(منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:دورة في LINQ To DataSet بواسطة: (اميره الروضينى) :: (منتدى الأكسس) الموضوع:اول برنامج من تصميمي بواسطة: (مرشدعلي) :: (منتدى الأكسس) الموضوع:طلب بواسطة: (weamman) :: (قسم الاعلانات) الموضوع:شركة ركن الشروق للخدمات بواسطة: (رضا جمال) :: (قسم الاعلانات) الموضوع:شقق نمليك للبيع المريوطية هرم كمبوند ام كلثوم 135 م بواسطة: (جمعة عللام) :: (منتدى الأكسس) الموضوع:مطلوب المساعدة فى برنامج محاسبة تكاليف بواسطة: (ابراهيم حورس) :: (قسم الاعلانات) الموضوع:أسرع التمويل في غضون 48 ساعة دون تاخير. بواسطة: (Aisha Ibrahim) :: (منتدى الأكسس) الموضوع:اظافة كود بواسطة: (كريمو2) :: (منتدى الأكسس) الموضوع:تجاهل الهمزة والتاء عند عملية البحث بواسطة: (startnet) :: (قسم الاعلانات) الموضوع:شركة ركن الشروق للخدمات بواسطة: (ايمن عيد) :: (قسم الاعلانات) الموضوع:شركة ركن الشروق للخدمات بواسطة: (ايمن عيد) :: (قسم الاعلانات) الموضوع:طرق لمكافحة الحشرات بواسطة: (ايمن عيد) :: (قسم الاعلانات) الموضوع:شركة ركن الشروق للخدمات بواسطة: (ايمن عيد) :: (أخبار التكنولوجيا) الموضوع:تحميل برنامج هاى مجانا للهواتف المحمول بواسطة: (سامح المصطفى) :: (قسم الاعلانات) الموضوع:كشف تسربات المياه - البيوت بواسطة: (الشر) :: (قسم الاعلانات) الموضوع:شقق للبيع بمدينة نصر الحى السابع تاصية للاستلام الفورى 225 م بواسطة: (جمعة عللام) :: (منتدى ADO.NET العام) الموضوع:رؤى الطبيعة .. منتجاتهم طبيعية ومميزة بواسطة: (شيماء إلحربي) :: (قسم الاعلانات) الموضوع:تسويق الكتروني – اعلان فيس بوك ممول – اعلان جوجل ادورد مع بواسطة: (جرافيرو109) :: (أخبار التكنولوجيا) الموضوع:كاميرات مراقبة بواسطة: (فيروز حسين) :: (منتدى البرامج) الموضوع:برنامج التصنيع و الانتاجProduction Hadaf بواسطة: (aly flex)


راديو القرآن

المواضيع المثبته: (منتدى برمجة الألعاب) الموضوع:تصميم الألعاب باستخدام game maker بواسطة: (Bahr ahmodah) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:DECODE SQL STATMENT بواسطة: (mshaqalaih) :: (منتدى Borland Delphi) الموضوع:أحفظ برامجك الديلفاوية من أذي العابثين باستخدام رقم الهارد (محترفين) بواسطة: (Hadyabady) :: (منتدى أنظمة الشبكات وأمنها) الموضوع:موسوعة كتب واسطوانات تعليم الشبكات Networking بواسطة: (مرحبا الساع) :: (منتدى البرامج) الموضوع:شروحات لبرامجك المفضلة بواسطة: (junkbki) :: (منتدى مبرمجي Microsoft Visual C#.NET) الموضوع:مكتبة الدوت نيت بواسطة: (fmo_82) :: (منتدى Microsoft SQL Server) الموضوع:كيف أقوم بنسخ البيانات فقط من جهازي الى الويب بواسطة: (أبو محمـد) :: (قسم الدروس و الدورات) الموضوع:تعلم معي البرمجة بالفيجوال بيسك .. بواسطة: (كوثــــــــــــر) :: (منتدى مبرمجي ASP.NET) الموضوع:كيفية قرائة الصحف الإلكترونية والكتب والمجلات عبر الانترنت بواسطة: (عبدالله جابر شقليه) :: (لغة PHP) الموضوع:دوره بي اتش بي بالفيديو php video tutorial بواسطة: (blackmanblack) :: (منتدى مبرمجي Microsoft Visual C#.NET) الموضوع:المواضيع والدروس التعليمية في الدوت نيت - ابدأ من هنا بواسطة: (fmo_82) :: (القسم المفتوح) الموضوع:قصص الأنبياء عليهم السلام .جميعا بواسطة: (غزاوية أصيلة) :: (قسم التعاميم والشكاوي) الموضوع:ماسنجر المحيط العربي بواسطة: (يوسف جميل جادالله) :: (منتدى مبرمجي ASP.NET) الموضوع:كتاب تصميم موقع اخباري بواسطة: (م.محمد الساعدي) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:كتب اوراكل (عربي) ...حمل... بواسطة: (عبد الرحمن) :: (منتدى برمجة الجرافكس) الموضوع:مجموعة دروس لتعليم الدايركت اكس بواسطة: (alaa gomaa) :: (قسم البرامج الجاهزة و الاكواد) الموضوع:مشروع طبيب الاسنان مع السورس كود بواسطة: (ITPROGRAMMER) :: (قسم المواضيع المميزة) الموضوع:المحاسب المميز - الاصدار الثاني - محاسبة و مخازن بواسطة: (alalal) :: (منتدى الأكسس) الموضوع:فيديو للشروحات والدروس من عمل الاعضاء بواسطة: (startnet) :: (منتدى Microsoft Visual Basic) الموضوع:أكبر مشاركة فيجوال بيسك بواسطة: (SkyLight)

عدد الصفحات : 2  1  2   > » موضوع مغلق إضافة موضوع جديد

> كيفية ربط الأوراكل مع asp.net,شرح لكيفية ربط procedure وال function
Bookmark and Share
تقييم الموضوع Label معدل التقيم:5
مشاركةالأحد,09/ذو الحجة/1426 هـ,03:51 مساءً
المشاركة #1

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



السلام عليكم ورحمة الله وبركاته
سوف أقوم بوضع لكم دروس لكيفية ربط الأوراكل مع ال asp.net لكيفية التعامل مع procedure و function الأوراكل.
لعملية ربط الأوراكل مع ال asp.net سوف نقوم باستخدما namespace(System.Data.OracleClient)  والتي تتعامل مع اصدار أوراكل 9i وما فوق.
وهنا سوف أضع لكم الكلاسس التي سوف نتعامل بها من خلال System.Data.OracleClient.
1-OracleCommand:هي مجموعة من جمل ال sql من stored procedure يتم تنفيذها على قاعدة بيانات الأوراكل.
2-OracleConnection:تستخدم لفتح الاتصال مع قاعدة بيانات الأوراكل وغلقها.
3-OracleParameter:وهي المتغيرات التي يتم إسنادها إلى OracleCommand من أجل وضع القيم للحقول.
4-OracleParameterCollection: تحتوي على مجموعة من المتغيرات.
5-OracleType: يتم من خلالها تحديد نوع حقول المتغيرات المسندة إلى OracleCommand وتركيبها.
عندما تود الاتصال بقاعدة بيانات الأوراكل يجب أن يتم إضافة ملف ال DLL إلى المشروع وهو System.Data.OracleClient.dll ، ويتم إضافته كما هو موضع في الصور التالية:
1- اذهب إلى Solution Exploer
ثم قوم بالضغط بالزر الأيمن على المشورع وقوم باختيار Add reference كما في الصورة التالية:


2- سوف تظهر لك نافذة جديدة ، اذهب إلى tab وقوم باختيار .NET واختار منها System.Data.OracleClient، كما في الصورة التالية:

الآن لاستخدام ال name space (System.Data.OracleClient) ضمن مشروعك قوم بعمل imports System.Data.OracleClient كالتالي:

 كود
using System.Data.OracleClient;'C#
Imports System.Data.OracleClient 'VB.NET


قوم بإضافة الاتصال بقاعدة البيانات كالتالي:
 كود
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");'C#
Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;") 'VB.NET

في المشاركة التالية سوف أقوم بشرح كيف يتم عمل عمليات على ال Oracle باستخدام ال procedure وال function.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/ذو الحجة/1426 هـ,04:12 مساءً
المشاركة #2

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



الآن سوف أقوم بوضع مثال من أجل كيفية إرجال البيانات من Stored procedure.
قوم بإنشاء ال procedure التاالية من أجل إرجاع مجموع السجلات:
CREATE OR REPLACE PROCEDURE count_arabmoheet_members
(
				reccount OUT NUMBER
)
IS
BEGIN
				SELECT COUNT(*) INTO reccount
				FROM members;
END count_arabmoheet_members;

لكيفية إسترجاع مجموع السجلات المرجعة من ال Stored procedure.
1- قوم بإنشاء الكائن OracleCommand، حيث يتم وضع به خاصية ال Connection وال CommandText لإسناد لها اسم ال Stored procedure و والخاصية CommandType.StoredProcedure، كالتالي:
 كود
'C#
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "count_arabmoheet_members";
cmd.CommandType = CommandType.StoredProcedure;
'Vb.NET
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "count_arabmoheet_members"
cmd.CommandType = CommandType.StoredProcedure

2- سوف نقوم بإنشاء الكائن OracleParameter والذي يستخدم من أجل إدخال القيم واستخراجها إلى Stored procedure، كالتالي:
 كود
'C#
cmd.Parameters.Add("reccount", OracleType.Number);
cmd.Parameters["reccount"].Direction = ParameterDirection.Output;
'VB.NET
cmd.Parameters.Add("reccount", OracleType.Number)
cmd.Parameters("reccount").Direction = ParameterDirection.Output

كما تشاهدون أنه تم وضع متغير reccount وهو المتغير الذي تم تعريفه في Stored procedure(count_arabmoheet_members) والذي يحمل مجموع السجلات المرجعة من عملية الاستعلام، وتم وضعه له ال direction قيمته ParameterDirection.Output أي أن عباره عن متغير يحتوي على نتائج مرجعه من ال Stored procedure.
ومن أجل الحصول على المستخرجات يمكنكم بناء DataSet, DataTable, or DataReader ولكن في مثالنا هذا لن نحتاج لاستخدامهم لأنه فقط قيمة واحده التي سوف تعود لنا وهي عدد السجلات فلذلك سوف نستخدم فقط الأمر ExecuteNonQuery، كالتالي:
 كود
'C#
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
'VB.NET
conn.Open
cmd.ExecuteNonQuery
conn.Close

من أجل طباعة عدد السجلات كالتالي:
 كود
'C#
response.write (cmd.Parameters["reccount"].Value);
'VB.NET
response.write(cmd.Parameters("reccount").Value)

في الدرس التالي سوف أقوم بوضع ما هي ال Methods المستخدمه لاستخراج البيانات في الكلاسس OracleCommand.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/ذو الحجة/1426 هـ,04:47 مساءً
المشاركة #3

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



سوف أقوم الآن بسرد لكم ال Methods المستخدمه لإسترجاع الباينات من الكلاسس OracleCommand:
1-ExecuteReader:تستخدم لبناء OracleDataReader عن طريق تنفيذ ال Stored procedure لاسترجاع مجموعه من البيانات.
2-ExecuteNonQuery:تستخدم لتنفيذ الاستعلام وال procedure التي لا تسترجع مجموعة من السجلات فقط التي تسترجع عدد السجلات التي تم التأثير عليها.
3-ExecuteOracleNonQuery:تستخدم لتنفيذ الاستعلام لاسترجاع عدد السجلات التي تم التأثير عليها، وهذه ال method تستخدم أيضاً OracleString parameter من أجل استرجاع قيمة ID لآخر سجل تم التعديل عليها عن طريق (UPDATE, INSERT, or DELETE ).
4-ExecuteScalar:تستخدم لاسترجاع قيمة أول حقل من أول سجل من مجموعى النتائج وتكون البيانات من نوع (NET Framework).
5-ExecuteOracleScalar: تستخدم مثل ExecuteScalar لكن يكون نوع البيانات على هيئة OracleType التي يتم تحديها.

ملاحظة: المنهج ExecuteOracleNonQuery() من الكلاس OracleCommand المستخدمة لتنفيذ جمل الاستعلام وال Stored procedure التي لا تقوم باسترجاع أي سجل، هذا المنهج يوقم باسترجاع قيمة من نوع int متمثلة من خلال عدد السجلات التي تم التأثير عليها من خلال الأوامر (UPDATE, INSERT, and DELETE) غير ذلك تقوم باسترجاع -1،اذا قمت بتنفيذ جمله استعلام سواء " ادخال, حذف,تعديل" وهذه الجمله قامت بالتعديل على او اضافه سجل " واحد " فقط , فان هذه الMethod تسترجع لك جمله OracleString لها رقم Uniquely "مميز" تستطيع من خلال الرقم هذا ان تستطيع التعرف على هذا السجل وتتمكن من معرف التغيير الذى احدثه فى قاعدة البيانات،يمكنك استخدام هذه القيمه لتحسين اداء الsubsequent المتعلقه بتلك الqueries
أيضا يمكنكم استخدام المنهج ExecuteNonQuery() والتي تعمل مثل ExecuteOracleNonQuery() لكنها لا تقوم باسترجاع (unique row identifier) كما سبق وذكرته لكم في الأعلى.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/ذو الحجة/1426 هـ,05:25 مساءً
المشاركة #4

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



المثال التالي سوف نقوم بعمل Stored procedure من أجل حذف بعض السجلات من جدول ال Topci عن طريق اسناد قيمة واحده لـ procedure، والتي لن تسترجع أي بيانات:
CREATE OR REPLACE PROCEDURE delete_topic
(
				T_no NUMBER
)
IS
BEGIN
				DELETE FROM topic
				WHERE topic_no = T_no;
END delete_topic;
وهذا الكود التالي من أجل تنفيذ ال
Stored procedure في الدوت نت:
 كود
'C#

OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");


OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "delete_topic";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("T_no", OracleType.Number).Value = 102;

conn.Open();
int rowsAffected = cmd.ExecuteNonQuery();
conn.Close();

response.write ("عدد السجلات التي تم التأثير عليها: " + rowsAffected);

'VB.NET

Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;")
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "delete_topic"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("T_no", OracleType.Number).Value = 102
conn.Open
Dim rowsAffected As Integer = cmd.ExecuteNonQuery
conn.Close
response.write("عدد السجلات التي تم التأثير عليها: " + rowsAffected)



--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأحد,09/ذو الحجة/1426 هـ,05:38 مساءً
المشاركة #5

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



عندما نود أن نقوم باسرجاع قيمة واحد من لقيمة حقل من خلال الاستعلام يجب أن نستخدم لذلك ال Function وليس ال Stored procedure لأنها لا تقوم باسترجاع القيم كما التي يتم استخدامها في T-SQL.
المثال التالي سوف نقوم بإنشاء Function من أجل إرجاع قيمة واحده فقط كالتالي:
CREATE OR REPLACE FUNCTION get_members_email (
				p_members_no NUMBER
)
RETURN VARCHAR2
IS p_email VARCHAR2(25);
BEGIN
				SELECT EMAIL INTO p_email FROM members
				WHERE members_no = p_members_no;
				
				RETURN p_email;
END get_members_email;

ولتنفيذ ال Function في الدوت نت يتم تنفيذها مثل عند استخدام ال Stored procedure، ونستخدم معها ParameterDirection.ReturnValue من أجل عملية استرجاع البيانات من خلال ال Function، وشاهدو الكود التالي للقيام بذلك:
 كود
'C#
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");


OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "get_members_email";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("p_members_no", OracleType.Number).Value = 101;
cmd.Parameters.Add("p_email", OracleType.VarChar, 25).Direction =ParameterDirection.ReturnValue;

conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

response.write ("عنوان البريد الإلكتروني: " + cmd.Parameters["p_email"].Value);
'VB.NET

Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;")
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "get_members_email"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("p_members_no", OracleType.Number).Value = 101
cmd.Parameters.Add("p_email", OracleType.VarChar, 25).Direction = ParameterDirection.ReturnValue
conn.Open
cmd.ExecuteNonQuery
conn.Close
response.write("عنوان البريد الإلكتروني: " + cmd.Parameters("p_email").Value)


وفي الدروس القادمة سوف أقوم بشرح كيف ستم استرجاع مجموعة من السجلات وذلك عن طريق استخدام REF CURSORS ضمن ال Packages.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,10/ذو الحجة/1426 هـ,05:59 مساءً
المشاركة #6

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



Result Sets and REF CURSORS
تستخدم ال REF CURSOR data type للعمل مع مجموعة نتائج ال Oracle.
ال REF CURSOR عباره عن مؤشر من خلال استرجاع السجلات في بيئة PL/SQL query، وهي ليست كأي مؤشر عادي، حيث أنها تعتبر كمتغير، وهو مرجع للمؤشر الذي تستطيع من خلاله الربط مع نتائج سجلات مختلفة خلال عملية التنفيذ.
استخدام REF CURSOR كمتغير خارجي لتمرير قيم السجلات من بنية Oracle إلى البرنامج التطبيقي المستخدم.
يتم تعريف المتغير الخارجي من خلال OracleType.Cursor في عملية الاستدعاء من خلال البرنامج التطبيقي للوصول إلى سجلات النتائج المؤشر عليها من خلال REF CURSOR.
ال OracleConnection يجب يجب أن تبقى مفتوحة خلال استخدام ال REF CURSOR.

Packages
ال Packages هي عبارة عن تعريف مسبق لمجموعة من ال procedures و ال Funcation التي تستطيع استخدامها فيما بعد في برنامجك التطبيقي.
المفهوم العام باستخدامه من خلال إنشاء أوامر ال PL/SQL والتي تستطيع بناء ال Packages ومحتوياته من ال procedures و ال Funcation واستخدامها لاحقاً في برنامجك من خلال الاستدعاء لاسم Package ومن ثم التحديد على أي ل procedures أو ال Funcation المراد الوصول لها.
قد لا تجد مكافئ لي ال Packages في أي برنامج قواعد بيانات آخر حيث أنك لن تجدها من خلال استخدام T-SQL.

ال Packages بها جزئين مهمين:
1- Specification (or spec): وهي عبارة عن مجمع لي تعريف مجموعة من ال procedures و ال Funcation، وفي منطقة ال Header يتم تعريف مجموعة من المتغيرات التي سيتم استخدامها خلال كتابة ال procedures و ال Funcation، ولكي تكون الأمور أكثر وضوحا نستطيع أن نشبه ال Package بأي class مشابهة في لغة ال C و C++.
2- Body:هو الذي يحتوي على ال procedures و ال Funcation التي سنقوم بكتابتها والمعرفة سابقا في ال Header.

والأن سنقوم بتوضيح أنوع المتغيرات االتي سوف تستخدم من خلال كتابة ال procedures أو ال Funcation، وهم ثلاث أنواع كالتالي:
1-IN:وهوي عباره عن متغيرات يتم إدخالها من خلال البرنامج التطبيقي إلى ال procedures أو ال Funcation من خلال استخدام لغة ال PL/SQL(كطريقة تمرير قيمة إلى متغير داخل ل procedures أو ال Funcation لاستدعائه).
2- OUT:هي القيمة التي يتم تصديرها من خلال ال procedures أو ال Funcation إلى البرنامج التطبيقي.
3- INOUT:هي المتغير الذي يتم تمرير إمن خلال البرنامج التطبيقي لى ال procedures أو ال Funcation ومن ثم يتم التعديل عليها داخل Packages وإرجاع القيمة مرة آخرى إلى البرنامج التطبيقي.

وفي الدرس القادم سوف أتطرق لوضع أمثلة حول ما تم توضيحية أعلاه.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,10/ذو الحجة/1426 هـ,06:13 مساءً
المشاركة #7

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



في المثال التالي سوف أقوم بوضع لكيفية استخدام ال package لكيفية تعريف بها مجموعة من ال Stored procedure وال Function:

CREATE OR REPLACE PACKAGE CRUD_LOCATIONS AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR);
PROCEDURE UpdateLocations (p_location_id IN NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR);
PROCEDURE DeleteLocations (p_location_id IN NUMBER);
PROCEDURE InsertLocations (p_location_id OUT NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR);
END CRUD_LOCATIONS;


وهذا ما يتم تعريفه داخل ال package Header.

والمثال التالي يوضح ألية استخدام التعريفات داخل ال Header وبرمجتها داخل ال Body:
CREATE OR REPLACE PACKAGE BODY CRUD_LOCATIONS AS
---إسترجاع البيانات من خلال REF CURSOR-------
PROCEDURE GetLocations (cur_Locations OUT T_CURSOR)
IS
BEGIN
				OPEN cur_Locations FOR
				SELECT * FROM LOCATIONS;
END GetLocations;

-------------التعديل على البيانات--------------
PROCEDURE UpdateLocations (p_location_id IN NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR)
is 
update Locations set street_address=p_street_address,
postal_code=p_postal_code,city=p_city,
state_province=p_state_province,
country_id=p_country_id where location_id=p_location_id;
end UpdateLocations;

--------حذف البيانات--------
PROCEDURE DeleteLocations (p_location_id IN NUMBER)
is
delete from Locations where location_id=p_location_id;
end DeleteLocations;
-----إضافة البيانات--------------------
PROCEDURE InsertLocations (p_location_id OUT NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR)
is 
insert into (location_id,street_address,postal_code,city,
state_province,country_id)
values 
(p_location_id,p_street_address,p_postal_code,p_city,
p_state_province,p_country_id);

END InsertLocations;

END CRUD_LOCATIONS;


وفي الدرس القادم سوف أوضح كيف يتم استخدامها من خلال ال الدوت نت.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,10/ذو الحجة/1426 هـ,06:53 مساءً
المشاركة #8

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



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

في هذا المثال سوف نستخدم ال Datareader من أجل جلب البيانات:
 كود

'C#
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "CRUD_LOCATIONS.GetLocations";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("cur_Locations", OracleType.Cursor).Direction =ParameterDirection.Output;


conn.Open();
OracleDataReader dr = cmd.ExecuteReader();

// output the results and close the connection.
while(dr.Read())
{
for(int i = 0; i < dr.FieldCount; i++)
response.write(dr[i].ToString() + ";");
response.write("<br>");
}
conn.Close();

'VB.NET
Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;")
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "CRUD_LOCATIONS.GetLocations"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("cur_Locations", OracleType.Cursor).Direction = ParameterDirection.Output
conn.Open
Dim dr As OracleDataReader = cmd.ExecuteReader
While dr.Read
 Dim i As Integer = 0
 While i < dr.FieldCount
   response.write(dr(i).ToString + ";")
   response.write("<br>")
 End While
 response.write("<br>")
End While
conn.Close


كما تلاحظون في الكود التالي كيف تم استخدام الباكج وتحديد أي إجراء سوف نقوم بعمل العمليات عليه:
 كود
cmd.CommandText = "CRUD_LOCATIONS.GetLocations"

حيث يتم وضع اسم الباكج ثم نقطه ثم اسم الإجراء الذي سوف نستخدمه.

 كود
cmd.Parameters.Add("cur_Locations", OracleType.Cursor).Direction = ParameterDirection.Output

هنا سوف يتم تمرير المتغير cur_Locations الذي تم تعريفه في الباكج ضمن البروسجير GetLocations.

بالنسبة لباقي الإجرائات لكيفية العمل عليها نفس ما قمت شرح من قبل لكيفية حذف السجلات يتم استخدام نفس الطريقة لعملية ترمير المتغيرات مع الأخد بعين الاعتبار بأن كل بروسجير أو فانكشن ضمن package Header يتم الوصول له من خلال تعريف اسم الباكج أولا ومن ثم اسم ال Procedure أو ال Function المراد استخدامه كما تم توضحيه أعلاه في المثال السابق.
ملاحظة: الميزة هنا أنك تتعامل مع ال Procedure أو ال Function كأنك تتعامل مع object من class.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,13/ذو الحجة/1426 هـ,10:18 صباحاً
المشاركة #9

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



Stored Procedures That Return a Single Value

ال ExecuteOracleScalar() method من OracleCommand class تستخدم لتنفيذ جمل ال SQL و Stored procedure التي تقوم باسترجاع قيمه واحد كا OracleType data type.
اذا كان الأمر قام بعملية استرجاع نتائج فأن ExecuteOracleScalar() method سوف تسترجع قيمة أول حقل من الصف الأول.
إن ال ExecuteOracleScalar() method تسترجع قيمة فارغة في حالة إذا كانت REF CURSOR سوف تسترجع قيمة أول حقل لأول صف عندما تشير أليها REF CURSOR.

ال ExecuteOracleScalar() method من OracleCommand class هي شبيهة لل ExecuteOracleScalar() method لكناه تسترجع البيانات كأ .NET Framework data type.
رغم كل ما تم ذكره في الأعلى فأنه ولا واحده من هذ methods مفيدة للتعامل مع Stored procedure.
ال Oracle stored procedures لا مكنها استراج القيمة كأجزاء مرجهة من الجمل، فقط عن طريق متغيرات خارجية يتم عمل ذلك، وأيضا لا تستطيع من اسرتجاع مجموعة من النتائج اله باستثناء المتغيرات الخارجية لل REF CURSOR .

أنستطيع من استرجاع القيم فقط عن باستخدام Oracle function عن طريق RETURN parameter وليس باستخدام أحد ExecuteScalar methods.


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,13/ذو الحجة/1426 هـ,10:36 صباحاً
المشاركة #10

مدير منتديات المحيط العربي
الرتبة في المنتدى:عماد



المجموعة: الإدارة
المشاركات: 3905
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:فلسطين
رقم العضوية: 1



Sequences
ال Sequences تستخدم في الأوراكل لتوليد رقم unique بدلاً من data type uniqueidentifier المستخدمة في SQL server.
الهدف من استخدام Sequences التي تقوم بتوليد رقم unique من أجل استخدامه كمفتاح أساسي (PK) للجدول، وهي تستخدم من أجول توليد أرقام (Auto number).

الأن في المثال التالي سوف نقوم بعملية كيف يتم انشاء Sequences في الأوراكل
create SEQUENCE LOCATIONS_SEQ
				INCREMENT BY 100
				START WITH 1
				MAXVALUE 9900
				MINVALUE 1
				NOCYCLE 
				NOCACHE
				NOORDER


في المثال التالي سوف نعرف كيف يتم استدعاء SEQUENCE التي قمنا بإنشاءها أعلى :
create OR REPLACE PROCEDURE ADD_LOCATION (
				p_location_id OUT NUMBER,
				p_street_address IN VARCHAR2,
				p_postal_code IN VARCHAR2,
				p_city IN VARCHAR2,
				p_state_province IN VARCHAR2,
				p_country_id IN CHAR
)
AS
BEGIN
				insert INTO LOCATIONS (
							 LOCATION_ID,
							 STREET_ADDRESS,
							 POSTAL_CODE,
							 CITY,
							 STATE_PROVINCE,
							 COUNTRY_ID)
				VALUES (
							 LOCATIONS_SEQ.NEXTVAL,
							 p_street_address,
							 p_postal_code,
							 p_city,
							 p_state_province,
							 p_country_id
;
				
				select LOCATIONS_SEQ.CURRVAL INTO p_location_id FROM DUAL;
END ADD_LOCATION;


تشاهدون أنه وضعنا القيمة LOCATIONS_SEQ.NEXTVAL للحقل LOCATION_ID في جملة الإضافة التي تم وضعها داخل ال Stored procedure، فهكذا يتم استخدام ال Sequences حيث نقوم بوضع اسم ال Sequence مع وضع نقطه ثم NEXTVAL.
select LOCATIONS_SEQ.CURRVAL INTO p_location_id FROM DUAL;


هنا تم عمل جملة استعلام لل Sequence من الجدول DUAL بحيث سوف تحضر لنا القيمة الحالية التي تم تولديها لل LOCATIONS_SEQ ويتم تخزينها داخل المتغير p_location_id.

الأن سوف أضع لكم الكود الدوت نت من أجل عملية استدعاء البروسجير لكيفية الإضافة واسترجاع قيمة ال LOCATIONS_SEQ الحالية:
'C#
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");


OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "ADD_LOCATION";
cmd.CommandType = CommandType.StoredProcedure;



cmd.Parameters.Add("p_location_id", OracleType.Number).Direction =
				ParameterDirection.Output;
cmd.Parameters.Add("p_street_address", OracleType.VarChar).Value =
				"123 Any Street";
cmd.Parameters.Add("p_postal_code", OracleType.VarChar).Value = "33040";
cmd.Parameters.Add("p_city", OracleType.VarChar).Value = "Key West";
cmd.Parameters.Add("p_state_province", OracleType.VarChar).Value = "FL";
cmd.Parameters.Add("p_country_id", OracleType.VarChar).Value = "US";

					
OracleString rowId;
conn.Open();
int rowsAffected = cmd.ExecuteOracleNonQuery(out rowId);
conn.Close();


response.write("Rows affected: " + rowsAffected);
response.write("Location ID: " +cmd.Parameters["p_location_id"].Value);

'VB.NET
Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;") 
Dim cmd As OracleCommand = New OracleCommand 
cmd.Connection = conn 
cmd.CommandText = "ADD_LOCATION" 
cmd.CommandType = CommandType.StoredProcedure 
cmd.Parameters.Add("p_location_id", OracleType.Number).Direction = ParameterDirection.Output 
cmd.Parameters.Add("p_street_address", OracleType.VarChar).Value = "123 Any Street" 
cmd.Parameters.Add("p_postal_code", OracleType.VarChar).Value = "33040" 
cmd.Parameters.Add("p_city", OracleType.VarChar).Value = "Key West" 
cmd.Parameters.Add("p_state_province", OracleType.VarChar).Value = "FL" 
cmd.Parameters.Add("p_country_id", OracleType.VarChar).Value = "US" 
Dim rowId As OracleString 
conn.Open 
Dim rowsAffected As Integer = cmd.ExecuteOracleNonQuery(rowId) 
conn.Close 
response.write("Rows affected: " + rowsAffected) 
response.write("Location ID: " + cmd.Parameters("p_location_id").Value)


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة

    

عدد المتصفحين لهذا المنتدى «1»: (الضيوف «1» - المتخفون «0»)
الأعضاء «0»: .

عدد الصفحات : 2  1  2   > » موضوع مغلق إضافة موضوع جديد



 
الوقت الأن:اليوم,03:24 صباحاً بتوقيت القدس المحتلة

Powered By arabmoheet v3.1

منتديات المحيط العربي  -  راسلنا  -   أعلى
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)