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

مشاكل فى جمل Sql

بدأه امجد مختار في 5 سبتمبر 2008 · 14 رد · 1,603 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

1-

 
Cmd.CommandText = "select max(DateTo) as max1,Borrow from Sales where MemberId = " + memberId + "";
Dr = Cmd.ExecuteReader();

You tried to execute a query that does not include the specified expression 'Borrow' as part of an aggregate function.

2-

 
Cmd.CommandText = "update Accounts set Password = '" + TextBox2.Text + "' where UserName = '" + user + "'";
Cmd.ExecuteNonQuery();

Syntax error in UPDATE statement

3-

 
string question = DropDownList1.SelectedValue;
Cmd.CommandText = "insert into Members (Name,Tel,Mobile,Address,Mail,Question,Answer,RegisterationDate) values ('" + name + "','" + tel + "','" + mobile + "','" + address + "','" + email + "','" + question + "','" + answer + "','" + DateTime.Now + "')";
Cmd.ExecuteNonQuery();

Syntax error (missing operator) in query expression ''What's your First School Name?','q','31/08/2008 04:27:19 ص')'.

4-

Cmd.CommandText = "update Members set Name = '" + name + "',Tel = '" + tel + "',Mobile = '" + mobile + "',Address = '" + address + "',Mail = '" + email + "',Question = '22',Answer = '" + answer + "' where MembershipId = " + memberId + "";
Cmd.ExecuteNonQuery ();

لا يتم تطبيق الجملة على قاعدة البيانات

وشكراً

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#2

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

انك علمتني sql والداتا بيز من اسئلتك ومحاولتي الاجابة عليك

اشكرك كتير

بس المهم اللي انت سألت عنه قبل كده اتحلت مشكلتهم والحمد لله اتمنى هذا

وجاري محاولة ايجاد حل لمشكلتك

بس ياريت تبعت البرنامج بتاعك على طول مع المرفقات على سؤالك عشان نشتغل عليه مباشرة ونعرف بالظبط انت كاتب ايه وقاعدة البيانات كمان

#3

اخي الحبيب

انا من النظرة الاولى لجمل الـ sql

رأيت خطأ فظيع

وللأسف الى حد الان هناكـ من يبرمج بمثل هذه الطريقة في كتابة جمل الـ sql

اخي اقرأ عن sql injection

وستفهم قصدي تماما

وستعرف الاسلوب الذي يقضي على هذه الثغرة المميتة ..

http://en.wikipedia.org/wiki/SQL_injection

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

واستخدام الـ Parameters

وتحياتي لكـ

تم تعديل هذه المشاركة بواسطة Eng.C# في 5 سبتمبر 2008 في 20:13

52gv0m.gif
#4

1- ما ال data type الخاص ب DateTo اظن انه ليس date لو انه varchar استخدم convert

Cmd.CommandText = "select max(CONVERT(datetime,DateTo)) as max1,Borrow from Sales where MemberId = " + memberId + "";

2- ما قيمة TextBox2.Text

3- المشكلة في What's your First School Name استخدم what is

4- تاكد من وجود حقل بقيمة memberId

#5

شكراً جزيلاً لكم

بالنسبة للأخ : Prof.Mendl

تفضل رابط قاعدة البيانات

بالنسبة للأخ : Eng.C#

لقد قرأت المقالة وفهمت بعضها، وما الخطأ الفظيع الذى رأيته ؟ هل هو طريقة الكتابة بهذا الأسلوب أم هناك شىء آخر ؟ وبالنسبة لأسلوب الكتابة بالـ Parameters معرض أن يحدث به نفس الأخطاء إذن فما الفرق بينهم ؟

بالنسبة للأخ : AhmedElbaz

1- الـ datatype الخاصة بالحقل DateTo هى DateTime

2- قيمة textbox2.text قيمة نصية وهى كلمة المرور المراد تحديثها

3- الحمد لله، شكراً تم حل المشكلة ولكن ما الحل إذا اردت كتابتها كما كانت ؟

4- يوجد حقل بقيمة memberId

db.rar

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#6

اخي العزيز انا لا أقصد الاخطاء في جملة الـ sql

بل أقصد طريقة ادخال البيانات للداتا بيز ..

وهي بحد ذاتها ثغرة امنية كبيرة ...

الموضوع التي اعطيتك اياه .. يتحدث عن هذه الثغرة في جمل الـ sql

اخي الخطا ان تبعث القيمة من TextBox مباشرة الى الداتا بيز ..

وهذه الثغرة تسمى SQL Injection

ويا اخي كثير من المواقع الكبيرة سقطت بسبب استعمالها لطريقتك في التعامل مع الداتا بيز ...

لهذا اتمنى ان تبتعد عن هذه الطريقة وتستخدم طريقة الكبسولة

Parameters

وهي تكبسل المدخل في الـ TextBox وتضعطه في الداتا بيز ...

وبطريقتك لا ..

انت فتحت المجال لليوزر كي يلعب بقاعدة البيانات ويكتب جمل sql وينفذها ...

اقرأ اكثر عن هذه الثغرة ..

http://ar.wikipedia.org/wiki/%D8%A7%D8%AE%...%88%D9%8A%D8%A9

تحياتي لكـ

52gv0m.gif
#7

ارجو الرد

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#8

بالنسبة للجملة الأولى فيجب إضافة عبارة group by Borrow إلى نهاية جملة الـSQL لأن التجميع يتم حسب الحقل Borrow

أما الباقي فكما ذكر الأخوة استخدم الـparameters و ستحل معظم مشاكلك و تجعل برنامجك أكثر أمناً أيضاً.

#9

لقد استخدمت طريقة الـ

Parameters

ولكن دون فائدة المشاكل مازالت موجودة ولم يتم حلها

ارجو الفائدة

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#10

ضع الجمل بالـ Parameters

52gv0m.gif
#11

1-

 int memberId = 2;
Cmd.CommandText = "select max(DateTo) as max1,Borrow from Sales where MemberId = @x1";
Cmd.Parameters.AddWithValue ("@x1",memberId);
Dr = Cmd.ExecuteReader();

You tried to execute a query that does not include the specified expression 'Borrow' as part of an aggregate function.

2-

 
 string user = Request.Cookies["User"].Value;
Cmd.CommandText = "update Accounts set Password = @Pass where UserName = @User2";
Cmd.Parameters.AddWithValue("@Pass",TextBox2.Text);
Cmd.Parameters.AddWithValue("@User2",user);
Cmd.ExecuteNonQuery();

Syntax error in UPDATE statement

3-

string user, name, tel, mobile, address, email, question, answer;
user = Request.Cookies["User"].Value;
name = TextBox4.Text;
tel = TextBox5.Text;
mobile = TextBox6.Text;
address = TextBox7.Text;
email = TextBox8.Text;
question = DropDownList1.SelectedValue;
answer = TextBox9.Text;
Cmd.CommandText = "update Members set Name = @x1,Tel = @x2,Mobile = @x3,Address = @x4,Mail = @x5,Question = @x6,Answer = @x7 where MembershipId = @x8";
Cmd.Parameters .AddWithValue ("@x1",name);
Cmd.Parameters .AddWithValue ("@x2",tel);
Cmd.Parameters .AddWithValue ("@x3",mobile);
Cmd.Parameters .AddWithValue ("@x4",address);
Cmd.Parameters .AddWithValue ("@x5",email);
Cmd.Parameters .AddWithValue ("@x6",question);
Cmd.Parameters .AddWithValue ("@x7",answer);
Cmd.Parameters .AddWithValue ("@x8",memberId);
Cmd.ExecuteNonQuery ();

لا يتم تنفيذ الجملة على قاعدة البيانات

ارجو الإفادة

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#12

الأولى

Cmd.CommandText = "select max(DateTo) as max1,Borrow from Sales where MemberId = @x1 Group By Borrow ";

أي قاعدة بيانات تستخدم؟

#13

1 - You used the aggregate function Max() with one column, any column doesn't appear in aggregate fn

should appear in group by claues

2 - There 's a mistake in user

I think it's numeric and you try to use it as string , plz verify its value

3 - The problem in the sigle qoute ' in the question

you should remove it or replace it with '' (2 ' not double qoutation) i.e. put ' as an escape charecter before '

Test and feed back

#14

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

1- تم حل المشكلة

2- تأكدت من الحقول وهى سليمة ولكن لم يتم حل المشكلة

3- لم يتم حل المشكلة

بالنسبة للسؤال الذى كانت مشكلته خاصة بـ

escape character

تم حلها

وشكراً

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

#15

ارجو الرد

اللهم اهدنا فيمن هديت - اللهم صلى على سيدنا محمد

من أراد الدنيا فعليه بالقرآن ومن أراد الآخرة فعليه بالقرآن ومن أرادهما معاً فعليه بالقرآن

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