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

datagride

مغلق
بدأه kathy في 30 أبريل 2005 · 10 رد · 1,150 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ,

لدي سؤال في التعامل مع قاعدة البيانات وهو :

لنفرض أن هناك جدول اسمه timeable ويحتوي علي حقلين من نوع yes/no قمت بعملية الإتصال بهذا الجدول من برنامجي وعرضت البيانات في datagride وذلك كالتالي :

OleDbConnection thisconnection = new OleDbConnection("connection string");
thisconnection.Open ();
int x = 1;
string sql = "SELECT saturday,sunday,monday,tuesday,wednesday,thursday,friday FROM TimeAble WHERE groupid =" + x;
thisadapter = new OleDbDataAdapter(sql,thisconnection);
OleDbCommandBuilder thisbuilder = new OleDbCommandBuilder(thisadapter); 
thisdataset = new DataSet();
thisadapter.Fill(thisdataset,"TimeAble"); 
dataGrid.DataSource =thisdataset.Tables["TimeAble"];

المشكلة هي عندما أقوم بتعديل القيم في datagride وأحاول حفظها في قاعدة البيانات لم يحدث أي تعديل في القاعدة حيث قمت بكتابة التالي :

thisdataset.AcceptChanges();      
    thisadapter.Update(thisdataset,"TimeAble");

فكيف يمكن أن أحفظ أي تعديلات في datagride في قاعدة البيانات .

وشكرا

#2

الغي السطر الخاص ب AcceptChanges

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#3

عندما الغي السطر الخاص ب AcceptChanges يحدث الخطأالتالي :

Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

يعني يرفض ينفذ .

ياجماعة أرجو أن تساعدوني ... لأني في امس الحاجة لذلك.

#4

لازم ايكون موجود عندك PrimayKey في جملة ال select على شان يقدر ال commandBuilder يبني جملة update

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#5

طبيعة الجدول لا تحتاج الى PrimayKey لذلك حاولت أن الغي الأمر

OleDbCommandBuilder thisbuilder = new OleDbCommandBuilder(thisadapter);

لكنه أعطى خظأ أخر

Update requires a valid UpdateCommand when passed DataRow collection with modified rows.

فما هو الحل؟؟

#6

عند الغاءك الامر السابق لن يتم اضافة جمل Update,Insert,Delete الى DataAdapter

لحل ذلك عليكي اضافة PrimaryKey الى الجدول، أو قومي كتابة جملة ال Update,Insert,Delete بنفسك في الDataAdapter

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#7

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

#8

قمت بتعديل الجدول بحيث يحتوي على PrimaryKey وعندما كتبت الكود السابق مع الجملة التالية :

OleDbConnection thisconnection = new OleDbConnection("connection string");
thisconnection.Open ();
" SELECT*FROM TimeAble"
thisadapter = new OleDbDataAdapter(sql,thisconnection);
OleDbCommandBuilder thisbuilder = new OleDbCommandBuilder(thisadapter); 
thisdataset = new DataSet();
thisadapter.Fill(thisdataset,"TimeAble"); 
dataGrid.DataSource =thisdataset.Tables["TimeAble"];

ونفذ بشكل صحيح وتم تعديل القاعدة بشكل صحيح.

أما عندما كتبت الكود السابق مع الجملة التالية :

OleDbConnection thisconnection = new OleDbConnection("connection string");
thisconnection.Open ();
int x = 1;
string sql = "SELECT saturday,sunday,monday,tuesday,wednesday,thursday,friday FROM TimeAble WHERE groupid =" + x;
thisadapter = new OleDbDataAdapter(sql,thisconnection);
OleDbCommandBuilder thisbuilder = new OleDbCommandBuilder(thisadapter); 
thisdataset = new DataSet();
thisadapter.Fill(thisdataset,"TimeAble"); 
dataGrid.DataSource =thisdataset.Tables["TimeAble"];

فقد أعطى الخطأ التالي مرة أخرى

Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

فما هو الخطأ

تم تعديل هذه المشاركة بواسطة kathy في 2 مايو 2005 في 22:03

#9

لإنك لم تضعي ال Primary Key في الجملة الثانية

ال CommandBuilder يحتاج الى PK حتى يستطيع وضع شرط على السجل الذى يريد تحديث او الغاء، دون تغير السجلات الاخرى، لذلك يعتمد على PK لانه لن يكن به تكرار

والجملة الاولى تعمل لان عند إستخدام النجمة مع جملة select سوف يتم اختيار جميع الحقول بما فيهم ال PK

أرجو ان تكون وضحت الصورة الان

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#10

السلام عليكم

اريد ان اعرف كيف يمكن اضافة محتويات 2 textbox او اكثر للداتا جريد مع امكانية اضافة بيانات جديدة فى الtextbox و حفظ البيانات التى تم ادخالها فى الداتا جريد فقط

و شكرا

#11

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

أعتقد أن أول مشروع في موضوع "مشاريع صغيرة" يقوم بعمل ما تحتاجة من عرض البيانات في الداتا جريد ثم يقوم بتعديلها ثم حفظها في الداتا بيز بعد التعديل

موضوع مشاريع صغيرة

Name : Ahmed H. Alawady

Web Site : Alawady.info

Email : alawady_ahmed@hotmail.com

Tel : +2 012 345 6808

هذا الموضوع مغلق.

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