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

(أخبار التكنولوجيا) الموضوع:تحميل برنامج انستقرام 2017 للاندرويد برابط مباشر بواسطة: (sara100) :: (أخبار التكنولوجيا) الموضوع:تحميل لعبة كاندي كراش 2017 بواسطة: (sara100) :: (قسم الدعم الفني) الموضوع:صيانة ايديال زانوسى 01141252525بالاسكندرية بواسطة: (masa2016) :: (منتدى الأكسس) الموضوع:الفوترة الإلكترونية تدخل العالم العربي بواسطة: (ألف ياء) :: (منتدى التصميم والجرافيكس) الموضوع:تصميم شعارات مطاعم مبتكرة ابداعية – منتظر ردكم لتعليق عليها بواسطة: (نقطة انطلاق) :: (قسم الاعلانات) الموضوع:كاميرات مراقبة داخلية مقاومة للصدمات HIKVISION بواسطة: (sara hassan) :: (منتدى ال SQL العام) الموضوع:برنامج حسابات ومخازن بواسطة: (ahmedhabeb) :: (منتدى الأكسس) الموضوع:نموذج طباعة بيانات الحوالات البنكية والايداعات بواسطة: (alhop) :: (منتدى Microsoft Visual Basic) الموضوع:مشكلة في برنامج بلغة فيجول ستوديو2010 بواسطة: (thams) :: (قسم الجوال) الموضوع:شاهد وتعرف الى مميزات تطبيق تعارف عربي رائع بواسطة: (سيرياتالك) :: (قسم الاعلانات) الموضوع:حجز دومين وهوست 00201141844482 بواسطة: (atiafco9) :: (أخبار التكنولوجيا) الموضوع:تحميل برامج جديدة بواسطة: (sara100) :: (منتدى Microsoft Excel) الموضوع:كيفية اخفاء مفتاح save as بواسطة: (nadjib) :: (أخبار التكنولوجيا) الموضوع:برنامج ايمو للدردشة بواسطة: (sara100) :: (أخبار التكنولوجيا) الموضوع:واتس اب للاندرويد بواسطة: (sara100) :: (منتدى الأكسس) الموضوع:برنامج للمحلات التجارية الصغيرة بواسطة: (aly elhedewy) :: (منتدى الأكسس) الموضوع:طريقه الوارد اولا يصرف اولا بواسطة: (aly elhedewy) :: (أخبار التكنولوجيا) الموضوع:واتس اب من البرامج المميزه بواسطة: (sara100) :: (قسم التعاميم والشكاوي) الموضوع:اسئلة عن قواعد البيانات بواسطة: (m3forex) :: (قسم الاعلانات) الموضوع:تصميم اقوى فيديو موشن جرافيك بواسطة: (موشن جرافيك)


راديو القرآن

المواضيع المثبته: (منتدى مبرمجي ASP) الموضوع:مشروع تخرج القرية الذكية المصرية بواسطة: (caco) :: (منتدى برمجة الشبكات في بيئة الدوت نت) الموضوع:عمل برنامج بسيط مع قاعدة بيانات اكسس على شبكة محلية بواسطة: (allnsh 3) :: (قسم الدروس و الدورات) الموضوع:دروس فيديو للمهندس عدي لتعليم فيجوال بيسك دوت نت بواسطة: (المهندس عدي) :: (منتدى Microsoft Visual Basic) الموضوع:عرض الصور المخزنه في قاعدة البيانات بالكريستال ريبورت بواسطة: (ابو حمد) :: (منتدى مبرمجي ASP) الموضوع:مواقع يعطي سكربتات لكل لغات البرمجة بواسطة: (ahmadtec) :: (منتدى Microsoft Visual Basic) الموضوع:حصريا Microsoft Visual Studio 6.0 كاملة بواسطة: (Max Bayne) :: (منتدى البرامج) الموضوع:7 اسطوانات لتعليم شهاده ICDL بالصوت والصوره بواسطة: (مستشفى الكمبيوتر) :: (منتدى أجاكس(Asynchronous JavaScript and XML)) الموضوع:إستخدام Web Services مع ASP.NET AJAX بواسطة: (يوسف جميل جادالله) :: (القسم المفتوح) الموضوع:شاهد واشكر ربك على نعمة الاسلام بواسطة: (غزاوية أصيلة) :: (منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:دورة في LINQ To DataSet بواسطة: (jbsa) :: (منتدى أنظمة الشبكات وأمنها) الموضوع:أساسيات تصميم الشبكات بواسطة: (مرحبا الساع) :: (منتدى Microsoft Visual Basic) الموضوع:Home Administrator Project بواسطة: (zoubicom) :: (منتدى Microsoft Visual Basic) الموضوع:نظام إدارة المرتبات للمدارس Salary System 2008 بواسطة: (Max Bayne) :: (منتدى Microsoft Excel) الموضوع:دروس إكسل و شرح الدوال و تقنيات متقدمة بواسطة: (صهيب جاويش) :: (منتدى Microsoft Excel) الموضوع:معلومات سريعة من برنامج اكسل بواسطة: (junkbki) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:تعرف على تقنية Oracle APEX بواسطة: (وليد القدسي) :: (قسم أوفيس 2007) الموضوع:هذا القسم ارشيف المشاركات في منتدي الاكسس بواسطة: (startnet) :: (قسم الدروس و الدورات) الموضوع:برمجة بصمة الاصبع مع الدوت نت Microsoft FingerPrint Reader بواسطة: (FunctionSys) :: (منتدى الأكسس) الموضوع:مثال على تغير الكائنات حسب مقاس الشاشه بواسطة: (startnet) :: (منتدى برمجة الألعاب) الموضوع:برنامج رائع لتصميم الألعاب بواسطة: (mjxp)

عدد الصفحات : 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   > » موضوع مغلق إضافة موضوع جديد



 
الوقت الأن:اليوم,05:13 مساءً بتوقيت القدس المحتلة

Powered By arabmoheet v3.1

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