منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : هل أكسس بها خاصية Scope_Identity()
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
حتى لا اطيل احيلكم للسؤال والجواب لكنه خاص بsqlserver
واستفسر عن access
مرحبا اخي سعود

لا يوجد في access داله Scope_Identity ولكن تقدر تستعيض عنها ب Identity@@ مع تعديل بسيط جدا للطريقه والنتيجه هي نفسها
PHP كود :
Dim query As String "insert Into Categories (CategoryName) Values (@CategoryName);"
Dim ID As Integer
Dim connect 
As String "Provider=Microsoft.ACE.OLEDB.12.0;" _
    
"Data Source=|DataDirectory|\Database1.accdb;Persist Security Info=True;"
Using conn As New OleDbConnection(connect)
 
 Using cmd As New SqlCommand(queryconn)
 
   cmd.Parameters.AddWithValue("@CategoryName"Category.Text)
 
   conn.Open()
 
   cmd.ExecuteNonquery()
 
   cmd.Commandtext="select @@Identity"
 
   ID cmd.ExecuteScalar()
 
   conn.close()
 
 End Using
End Using 

لاحظ اخي سعود الاضافه اتعملت بexecutenonquery والاستعلام اتعمل بexecutescalar
ولازم كلهم يتعملو والاتصال مزال مفتوح ما تسكر

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

اخالفك الرأي اخي ابو نوره , استعمال Using يؤدي تلقائياً الى استدعاء الطريقة Dispose الخاصة بالكائنات المعرفة داخله و بالتالي يتم اغلاق الاتصال عند End using يبقى دور Garbage Collection ان تقوم بدورها.
كل وثائق Microsoft تشير الى ذلك .
انظر للملاحظة التي فوق المثال في الرابط التالي





The following example creates a SqlConnection, opens it, and displays some of its properties. The connection is automatically closed at the end of the using block.
SqlConnection.Open Method

سابقاً اجريت اختبارات على هذه الطريقة و تم مراقبة العمليات التي تجري على السيرفر و النتيجة كما اشارت Microsoft تماماً

يمكنك مراجعة الرابط التالي لمعلومات اوفر عن استخدام Using

using Statement

معلومات عن    Garbage Collection
تحياتي للجميع
مرحبا اخي ابو ليلى

اشكرك ودا مش رايي،
مع احترامي الكامل لحضرتك ولميكروسوفت لكن بالتجربه اللي حصلت شفتها بنفسي لما كنت اعمل في شركه قبل كم سنه
فريق المبرمجين عملو تجربه فتح الاتصال بعدد هائل باستخدام using لتعريف الاتصال وفتحه بدون ما يسكروه على السيرفر
ما يقدرش يكمل بعد عدد معين الا بعد وقت انتظار الين تتسكر مجموعه منها لوحدها

وعملو نفس التجربه بس بتسكير الاتصال ومشى الحال بدون مشكله

يمكن انت عملت تعديل لاعدادت السيرفر معملوهاش الفريق عندنا لان اذكر ما سمحو للفريق انهم يلمسو السيرفر

انا معرفش السيرفر غير من connectionstring لكن باعمل احتياطاتي في البرمجه عشان ما يحصلش مشكله ولو من باب الاحتياط


واتوقع انك خبير في السيرفرات، فهل الاصدارات الجديده للسيرفرات لها دور في المسأله دي؟

وتحياتي لك وللجميع
(03-08-17, 11:06 PM)أبو نوره كتب : [ -> ]مرحبا اخي ابو ليلى

اشكرك ودا مش رايي،
مع احترامي الكامل لحضرتك ولميكروسوفت لكن بالتجربه اللي حصلت شفتها بنفسي لما كنت اعمل في شركه قبل كم سنه
فريق المبرمجين عملو تجربه فتح الاتصال بعدد هائل باستخدام using لتعريف الاتصال وفتحه بدون ما يسكروه على السيرفر
ما يقدرش يكمل بعد عدد معين الا بعد وقت انتظار الين تتسكر مجموعه منها لوحدها

وعملو نفس التجربه بس بتسكير الاتصال ومشى الحال بدون مشكله

يمكن انت عملت تعديل لاعدادت السيرفر معملوهاش الفريق عندنا لان اذكر ما سمحو للفريق انهم يلمسو السيرفر

انا معرفش السيرفر غير من connectionstring لكن باعمل احتياطاتي في البرمجه عشان ما يحصلش مشكله ولو من باب الاحتياط


واتوقع انك خبير في السيرفرات، فهل الاصدارات الجديده للسيرفرات لها دور في المسأله دي؟

وتحياتي لك وللجميع

تحياتي لك الاخ ابو نوره , هي ليست مسألة سيرفرات الموضوع كله متعلق بـ    Garbage Collection    
و متى يتم استنهاظها اذ ان المتحكم في الموضوع هو الوندوز نفسه و ليس البرنامج خاصتنا .
اذ ان تشغيل و استدعاء الـ  Garbage Collection    يتم عن طريق الوندوز لتنظيف الذاكرة من كل العناصر غير المستخدمة , و هذه العملية مكلفة على موارد النظام لذا لا يفضل برمجياً استدعائها بل يترك الامر للوندوز للقيام بها
ممكن تكون سرعة الاتصالات و عددها الكبير في وقت واحد لم يسمح ولم يتمكن الوندوز من التخلص من هذه الاتصالات المفتوحة
كما ننوه في مثل هذه الحالة التي تحتوي على عدد كبير من الاتصالات من عدد كبير من المستخدمين
ان يستخدموا مفهوم Pool Connection افضل لسلامة التطبيقات الكبيرة.
وكما قلت انت الحرص واجب , و اشد على يديك في هذا.

تحياتي للجميع
فقط الإفراط في استخدام جملة Using له أضرار ومخاطر لا يمكن التنبؤ بها ابدا
وعلي ما أعتقد و الله أعلم أن السبب هو المبرمج نفسه لأنه
لا يضع في اعتباره الفترة الزمنية التي يحتاجها نظام التشغيل لكي يتخلص من المتغيرات
أيضا المبرمج لا يضع في اعتباره ان يفشل Constructor الخاص بأي متغير في أن يبدأ بشكل صحيح وهذا قد يحدث لأي سبب من الاسباب
وغالبا هنا يحدث memory leak
مثلا لنفترض أن  SqlCommand فشل لسبب ما
هنا ستظل Connection مفتوحة
والسبب ان جملة using هنا قد لا تجد ما تقوم بعمل Dispsoe له


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