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

مشكلة الفاصلة العليا (')الخاصة عند تنفيذ الأمر

مغلق
بدأه shramroasp في 29 يناير 2006 · 5 رد · 1,139 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هناك بعض الحروف المستخدمة في أوامر sql والخاصة بتنفيذ insert , update, delete ولكن إذا دخلت هذه الحروف ضمن امر لا بد من تنفيذه أعتقد أننا نضع امامها @ لضمان تنفيذ الأمر .. ولكن عندما قمت بتكوين الأمر من خلال مجموعة من textbox بالصيغة:

string mycommand = @"inset into table (field1,field2) valuse ("+
"'"+this.TextBox1.Text+"','"+this.TextBox2.Text+"')";

وقمت بتمرير الأمر السابق عن طريق ExecuteNonQuery();

ظهر لي خطً

Syntax error (missing operator) in query expression

ناتج عن أن بعض الأحرف الموجودة داخل الـ TextBox1 ضمن الحروف الخاص وخصوصا حرف الفاصلة العليا (')

لأن بوجودها داخلTextBox1 أصبح الأمر غير مضبوط لأنه اعتبر أن علامة التنصيص غير مقفلة.

لا أعرف أن كان صيغة كلامي مفهوما أم لا .

ولكن اعتقد أن البعض منا قد مر بمثل هذه التجربة من قبل .

فأرجو ممن لديه أي تجربة او فكرة ان يوضح لي الحل وله جزيل الشكر

#2

حول أي علامة تنصيص ' الى '' (أي مرتين)

أو (الطريقة الأفضل) استعملي البارامترز بدلاً من إدخال النص مباشرة إلى جملة الـsql فهذه الطريقة تجعل البرنامج عرضة لخطر هجوم الـsql injection

string mycommand = "insert into table (field1,field2) values (?,?)";

تم تعديل هذه المشاركة بواسطة System Down في 29 يناير 2006 في 17:05

#3

عزيزي shramroasp

الكود الذي كتبته , فيه خطأ , اعتقد أن الخطأ نتيجة عبارة sql الخاطئة وليس نتيجة المحارف '' لذلك عليك تصحيح ال inset إلى insert

ليصبح الكود بالشكل التالي

string mycommand = @"insert into table (field1,field2) valuse ("+"'"+this.TextBox1.Text+"','"+this.TextBox2.Text+"')";

ومن أجل أداء أفضل في مثل هذه الحالات أنصح بتلوين الأكواد بحيث أن السلاسل الرمزية تظهر بلون واحد فيصبح التمييز اسهل

تم تعديل هذه المشاركة بواسطة oneforall2012 في 29 يناير 2006 في 18:34

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

dotnetinsaudi-subscribe@yahoogroups.com

#4

أشكر لكم تجاوبكم ولكن بالفعل انا أقوم بكل ما هو مكتوب في الردود والمثال الذي أوردته للتوضيح ليس إلا

ولكن اود من الأخوة الأعزاء تجربة الآتي:

فورم يحتوي على textBox1 ويخزن في الجدول mytabel في الحقل myfield والذي هو من نوع string

فإذا أردت تخزين كلمة don't talk على سبيل المثال داخل الحقل وألاحظ أن الكلمة تحتوي على الفاصلة العليا فيكون أمر

string mycommand = @"insert into mytable(myfield) valuse ('"+TextBox1.Text+"')";

ولكن لإحتواء TextBox1 على فاصلة ( علامة التنصيص) والموجودة ضمن الكلمةdo'nt talk سيكون الأمر كما اننا كتبنا

string mycommand = @"insert into mytable(myfield) valuse ('don't talk')";

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

أرجو أن أكون أوضحت المقصود

#5

أخي العزيز بحثت في منتدى ASP.NET ووجدت سؤالا يشبه سؤالك أرجو الإطلاع

نصيحة أن تستخدم البارمتر والإجراءات اذا كنت تستخدم SQL Server

http://forums.asp.net/1060723/ShowPost.aspx

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

dotnetinsaudi-subscribe@yahoogroups.com

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…