الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما هي الطرق الصحيحة لربط البيانات

بدأه abdalhady في 5 أكتوبر 2009 · 3 رد · 806 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اخواني الاعزاء اقوم حاليا ببناء برنامج لاستلام و تسليم قطع الصيانات لاحدى الشركات

و يحوي البرنامج على زبائن و موردين و موظفين و إيصالات شحن و تصنيف للمواد و غيرها من الحقول الضرورية

لكن هناك عددة اسئلة

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

2 - انا استخدم app.config و هو الذي يحوي على بيانات الاتصال فهل هذا صحيح

و هل يوجد طريقة اصح اكثر في بيانات الاتصال و كيفة العمل معها مع النوافذ المتعددة

و ايضا في هذه الطريقة اعاني انه عند فتح البرنامج او كل ما يتم فتح نافذة يتم الجمود مدة ثواني ثم يفتح النافذة فلماذا ؟؟؟

و السؤال الاخر

عند تنصيب البرنامج على حاسب الزبون فكيف يمكنني رفع قواعد البيانات على سيرفر الزبون و ان كان هناك بيانات قديمة و تم اعادة تنصيب البرنامج مرة اخرى بعد ما تم فرمتة الجهاز كيف يمكن رفع قواعد بيانات قديمة

و السؤال الاخير

 SqlCommand cc = null;
			cc = new SqlCommand("SELECT CardMaintenance.ID,CardMaintenance.IDCustomers as 'رقم الزبون'," +
			"Customers.Name as 'أسم الزبون',CardMaintenance.FUnit as 'المادة', CardMaintenance.Unit as 'الموديل', " +
			"CardMaintenance.SirealNumber as 'رقم التسلسلي', CardMaintenance.Note2 as 'إجرائات الصيانة'" +
			"FROM CardMaintenance INNER JOIN" +
			"Customers ON CardMaintenance.IDCustomers = Customers.ID", s);

			SqlDataReader r = cc.ExecuteReader();

			DataSet ds = new DataSet();
			DataTable dt = new DataTable("MyTable");
			ds.Tables.Add(dt);

			dt.Columns.Add("ID", typeof(int));
			dt.Columns.Add("رقم الزبون", typeof(int));
			dt.Columns.Add("أسم الزبون", typeof(string));
			dt.Columns.Add("المادة", typeof(string));
			dt.Columns.Add("الموديل", typeof(string));
			dt.Columns.Add("رقم التسلسلي", typeof(string));
			dt.Columns.Add("إجرائات الصيانة", typeof(string));

			while (r.Read())
			{
				dt.Rows.Add(r["ID"].ToString());
				dt.Rows.Add(r["رقم الزبون"].ToString());
				dt.Rows.Add(r["أسم الزبون"].ToString());
				dt.Rows.Add(r["المادة"].ToString());
				dt.Rows.Add(r["الموديل"].ToString());
				dt.Rows.Add(r["رقم التسلسلي"].ToString());
				dt.Rows.Add(r["إجرائات الصيانة"].ToString());
			}
			dataGridView1.DataSource = ds;
			dataGridView1.DataMember = "MyTable";

			r.Close();

لماذا عندما اقوم بالتنفيذ تظهر هذه الرسالة مع العلم ان الاستعلام صحيح 100%

Incorrect syntax near the keyword 'ON'.

على ما اظن ان المشكلة من SqlDataReader r = cc.ExecuteReader();

لاننا هنا نتعامل مع اكثر من جدول في قاعدة البيانات

لكن لم اصل إلى حل المشكلة إلى الان

و اسف ان كانت الاسئلة طويلة بعد الشيء

و جزاكم الله كل خير

#2

السلام عليكــم ورحمـة الله وبركاتــه ،،

حتى يقوم برنامجك بعمل إتصال صحيح مع قاعدة البيانات فأفضل طريقة هي إستخدام system.configuration و ذلك بإتباع هذه الخطوات:

1-ضف إسم الفضاء الآتي في بداية صفحة الكود لكل فورمة:

using system.configuration

2-ضف reference للمشروع system.configuration

3-أكتب هذا الكود في كل فورمة:

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings[1].ConnectionString);

هنا الكائن con يأخذ جملة الاتصال من ملف app.config ، فإذا أردت تعديل الجملة ما عليك إلا الذهاب إلى ملف app.config.

بالنسبة لمشكلة جمود النافذة ، فأظن انه عند تحزيم البرنامج ستختفي هذه المشكلة.

أما بالنسبة لرسالة الخطأ فعليك أن تضع مسافة بعد كلمة "inner join"

#3

من الممكن أن يتم تخزين بيانات الإتصال فى أماكن عدة

مثلما فعلت أنت و أيضا كما أشار الأخ

و تستطيع أن تقوم بتخزينها فى الريجيسترى بكل سهولة

و أيضا من الممكن أن تقوم بتخزينها فى ملف منفصل

بالنسبة لموضوع الجمود فهذا يعتمد على الذى تفعله فى بداية كل فورم

ما هو الكود الموجود فى بداية الفورم التى تتجمد عند فتحها ؟؟

بالنسبة مسألة الإحتفاظ بالبيانات القديمة فأبسط شئ هو عمل باك أب لقاعدة البيانات كل فترة أو مثلا كلما يقوم البرنامج بالغلق حسب الذى تراه

كود عمل باك أب متوفر فى أماكن عدة فقط أبحث عنه !

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#4

جزاكم الله كل خير على الردود

لكن الذي اقوم به هو كالتالي في نافذة البداية و هي من نوع MDIParent

  public static SqlConnection s = new SqlConnection(Properties.Settings.Default.MaintenanceSIPConnectionString);

و عند الحدث Load

اقوم بفتح الاتصال و و التحقق من قاعدة البيانات و عند كل فتح نافذة لا يتم فتح اتصال جديد انما عند فتح كل نافذة يتم استخدام الكود التالي

اولا على مستوى الكلاس يتم تعريف

public static AddCustomer Cu = null;

و عند حدث نقرة الزر لفتح النافذة يتم استخدام الكود التالي

  if (Cu == null)
			{
				Cu = new AddCustomer();
				Cu.MdiParent = this;
				Cu.Scust = s;
			}
			else
			{
				if (Cu.IsDisposed)
				{
					Cu = new AddCustomer();
					Cu.MdiParent = this;
					Cu.Scust = s;
				}
			}

			Cu.Focus();
			Cu.Show();

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

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

اما سؤالي الاخير فهو

في حال اردت ان اقوم بتنصيب البرنامج عند زبون كيف يمكن رفع قاعدة البيانات على حاسبه و في حال كانت قاعدة البيانات قديمة و تم فرمتة الجهاز و اعادة تنصيب نظام جديد فكيف يمكن رفع قاعدة بيانات القديمة على السيرفر

و شكرا

مواضيع مشابهة