03-08-17, 04:57 AM
03-08-17, 07:56 AM
مرحبا اخي سعود
لا يوجد في access داله Scope_Identity ولكن تقدر تستعيض عنها ب Identity@@ مع تعديل بسيط جدا للطريقه والنتيجه هي نفسها
لاحظ اخي سعود الاضافه اتعملت بexecutenonquery والاستعلام اتعمل بexecutescalar
ولازم كلهم يتعملو والاتصال مزال مفتوح ما تسكر
ملاحظه هامه للي بيتعامل مع قاعده البيانات انه ضروري يسكر الاتصال وما يتركه معلق متل الكود الاصلى اللى في الرابط
علشان ما يستنفذ عدد الاتصالات المسموحه بالوقت نفسه خصوصا بتعدد المستخدمين وكثره التعامل مع البيانات
ولا يفكر المبرمج انه مدام استخدم using انه ما يهتم يسكر الاتصال لالا هاذى الفكره غلط عن تجربه
لا يوجد في 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(query, conn)
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 انه ما يهتم يسكر الاتصال لالا هاذى الفكره غلط عن تجربه
03-08-17, 02:37 PM
بارك الله فيك وفي علمك
و اشكر لك ماقدمته من نصائح ....وفعلا كنت اظن ان using كفيلة بالاغلاق.
و اشكر لك ماقدمته من نصائح ....وفعلا كنت اظن ان using كفيلة بالاغلاق.
03-08-17, 05:28 PM
السلام عليكم و رحمة الله و بركاته
اخالفك الرأي اخي ابو نوره , استعمال Using يؤدي تلقائياً الى استدعاء الطريقة Dispose الخاصة بالكائنات المعرفة داخله و بالتالي يتم اغلاق الاتصال عند End using يبقى دور Garbage Collection ان تقوم بدورها.
كل وثائق Microsoft تشير الى ذلك .
انظر للملاحظة التي فوق المثال في الرابط التالي
سابقاً اجريت اختبارات على هذه الطريقة و تم مراقبة العمليات التي تجري على السيرفر و النتيجة كما اشارت Microsoft تماماً
يمكنك مراجعة الرابط التالي لمعلومات اوفر عن استخدام Using
using Statement
معلومات عن Garbage Collection
تحياتي للجميع
اخالفك الرأي اخي ابو نوره , استعمال 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
تحياتي للجميع
03-08-17, 11:06 PM
مرحبا اخي ابو ليلى
اشكرك ودا مش رايي،
مع احترامي الكامل لحضرتك ولميكروسوفت لكن بالتجربه اللي حصلت شفتها بنفسي لما كنت اعمل في شركه قبل كم سنه
فريق المبرمجين عملو تجربه فتح الاتصال بعدد هائل باستخدام using لتعريف الاتصال وفتحه بدون ما يسكروه على السيرفر
ما يقدرش يكمل بعد عدد معين الا بعد وقت انتظار الين تتسكر مجموعه منها لوحدها
وعملو نفس التجربه بس بتسكير الاتصال ومشى الحال بدون مشكله
يمكن انت عملت تعديل لاعدادت السيرفر معملوهاش الفريق عندنا لان اذكر ما سمحو للفريق انهم يلمسو السيرفر
انا معرفش السيرفر غير من connectionstring لكن باعمل احتياطاتي في البرمجه عشان ما يحصلش مشكله ولو من باب الاحتياط
واتوقع انك خبير في السيرفرات، فهل الاصدارات الجديده للسيرفرات لها دور في المسأله دي؟
وتحياتي لك وللجميع
اشكرك ودا مش رايي،
مع احترامي الكامل لحضرتك ولميكروسوفت لكن بالتجربه اللي حصلت شفتها بنفسي لما كنت اعمل في شركه قبل كم سنه
فريق المبرمجين عملو تجربه فتح الاتصال بعدد هائل باستخدام using لتعريف الاتصال وفتحه بدون ما يسكروه على السيرفر
ما يقدرش يكمل بعد عدد معين الا بعد وقت انتظار الين تتسكر مجموعه منها لوحدها
وعملو نفس التجربه بس بتسكير الاتصال ومشى الحال بدون مشكله
يمكن انت عملت تعديل لاعدادت السيرفر معملوهاش الفريق عندنا لان اذكر ما سمحو للفريق انهم يلمسو السيرفر
انا معرفش السيرفر غير من connectionstring لكن باعمل احتياطاتي في البرمجه عشان ما يحصلش مشكله ولو من باب الاحتياط
واتوقع انك خبير في السيرفرات، فهل الاصدارات الجديده للسيرفرات لها دور في المسأله دي؟
وتحياتي لك وللجميع
04-08-17, 01:29 AM
(03-08-17, 11:06 PM)أبو نوره كتب : [ -> ]مرحبا اخي ابو ليلى
اشكرك ودا مش رايي،
مع احترامي الكامل لحضرتك ولميكروسوفت لكن بالتجربه اللي حصلت شفتها بنفسي لما كنت اعمل في شركه قبل كم سنه
فريق المبرمجين عملو تجربه فتح الاتصال بعدد هائل باستخدام using لتعريف الاتصال وفتحه بدون ما يسكروه على السيرفر
ما يقدرش يكمل بعد عدد معين الا بعد وقت انتظار الين تتسكر مجموعه منها لوحدها
وعملو نفس التجربه بس بتسكير الاتصال ومشى الحال بدون مشكله
يمكن انت عملت تعديل لاعدادت السيرفر معملوهاش الفريق عندنا لان اذكر ما سمحو للفريق انهم يلمسو السيرفر
انا معرفش السيرفر غير من connectionstring لكن باعمل احتياطاتي في البرمجه عشان ما يحصلش مشكله ولو من باب الاحتياط
واتوقع انك خبير في السيرفرات، فهل الاصدارات الجديده للسيرفرات لها دور في المسأله دي؟
وتحياتي لك وللجميع
تحياتي لك الاخ ابو نوره , هي ليست مسألة سيرفرات الموضوع كله متعلق بـ Garbage Collection
و متى يتم استنهاظها اذ ان المتحكم في الموضوع هو الوندوز نفسه و ليس البرنامج خاصتنا .
اذ ان تشغيل و استدعاء الـ Garbage Collection يتم عن طريق الوندوز لتنظيف الذاكرة من كل العناصر غير المستخدمة , و هذه العملية مكلفة على موارد النظام لذا لا يفضل برمجياً استدعائها بل يترك الامر للوندوز للقيام بها
ممكن تكون سرعة الاتصالات و عددها الكبير في وقت واحد لم يسمح ولم يتمكن الوندوز من التخلص من هذه الاتصالات المفتوحة
كما ننوه في مثل هذه الحالة التي تحتوي على عدد كبير من الاتصالات من عدد كبير من المستخدمين
ان يستخدموا مفهوم Pool Connection افضل لسلامة التطبيقات الكبيرة.
وكما قلت انت الحرص واجب , و اشد على يديك في هذا.
تحياتي للجميع
04-08-17, 12:14 PM
فقط الإفراط في استخدام جملة Using له أضرار ومخاطر لا يمكن التنبؤ بها ابدا
وعلي ما أعتقد و الله أعلم أن السبب هو المبرمج نفسه لأنه
لا يضع في اعتباره الفترة الزمنية التي يحتاجها نظام التشغيل لكي يتخلص من المتغيرات
أيضا المبرمج لا يضع في اعتباره ان يفشل Constructor الخاص بأي متغير في أن يبدأ بشكل صحيح وهذا قد يحدث لأي سبب من الاسباب
وغالبا هنا يحدث memory leak
مثلا لنفترض أن SqlCommand فشل لسبب ما
هنا ستظل Connection مفتوحة
والسبب ان جملة using هنا قد لا تجد ما تقوم بعمل Dispsoe له
أيضا هناك حالات من الأفضل للمبرمج أن يضمن فيها تماما أن الكود الخاص به
قد تم تنفيذه بشكل لائق و هذا قد يتم بأساليب بسيطة كثيرة
وعلي ما أعتقد و الله أعلم أن السبب هو المبرمج نفسه لأنه
لا يضع في اعتباره الفترة الزمنية التي يحتاجها نظام التشغيل لكي يتخلص من المتغيرات
أيضا المبرمج لا يضع في اعتباره ان يفشل Constructor الخاص بأي متغير في أن يبدأ بشكل صحيح وهذا قد يحدث لأي سبب من الاسباب
وغالبا هنا يحدث memory leak
مثلا لنفترض أن SqlCommand فشل لسبب ما
هنا ستظل Connection مفتوحة
والسبب ان جملة using هنا قد لا تجد ما تقوم بعمل Dispsoe له
أيضا هناك حالات من الأفضل للمبرمج أن يضمن فيها تماما أن الكود الخاص به
قد تم تنفيذه بشكل لائق و هذا قد يتم بأساليب بسيطة كثيرة