PDA

View Full Version : سوال: رکورد اصلا حذف یا ویرایش نمیشه،نه با asp و نه با خود SQL Server Management Studio



reza_shnia
پنج شنبه 11 مهر 1387, 19:00 عصر
توی یک فرم عضو گیری،یک کاربر برای یک فیلد مقدار '; و برای یک فیلد مقدار [p رو وارد کرده.
حالا من هرجور می خوام اون رکورد رو پاک کنم برنامه SQL Server Management Studio ارور زیر رو میده :
the updated row has changed or been deleted since data was last retrieved
با خود asp هم نمیشه
نکات :
1- نوع فیلد ها nchar هست
2- این مشکل رو خودم تو یک بانک دیگه هم امتحان کردم،عینا همین ارور رو میده
3- کد های asp درست هستند چون برای بقیه فیلد ها کا می کنن
4- به فرض محال اگر اشکال از کد های asp باشه،SQL Server Management Studio که باید کار کنه
5- ترجمه و مفهوم ارور کمکی نمی کنه،چون من موقعی که با SQL Server Management Studio می خوام اون رکورد رو حذف کنم،هیچ برنامه ای به بانک وصل نیست که بخواد مقدار فیلد رو همون موقع عوض کنه

kashaneh
شنبه 13 مهر 1387, 14:29 عصر
دوست عزيز كاراكترهاي وارد شده از جمله كاراكترهاي غير مجاز و نامتعارف هستند كه در حملات موسوم به Sql Injection هم از آنها استفاده مي شود. از اونجايي كه هميشه پيشگيري از درمان بهتر هست، توصيه مي كنم قبل از اضافه كردن اطلاعات عضو جديد در بانك اطلاعاتي، از معتبر بودن مقادير از جمله اينكه هيچ از كاراكترهاي غير مجاز در اطلاعات ورودي نباشد، اطمينان حاصل كنيد و بعد اونها رو توي ديتابيس ثبت كنين.
اما براي رفع عيب فعليتون اينكه من يه نمونه آزمايشي اين كارو كردم ولي در حذف مشكل شما رو نداشتم و به سادگي پاك شد. حالا شما به عنوان يه راه حل مي توني يه Query حذف اجرا كني كه اون ركورد مورد نظر رو برات پاك كنه مثلا اينطوري :


Delete From TableName Where ID = 10

reza_shnia
شنبه 13 مهر 1387, 21:00 عصر
باتشکر از شما دوست عزیز،
با این کد شما ، فیلد رو تونستم حذف کنم.
گفتید که پیشگیری بهتر از درمانه،
من با چه کدی می تونم چک کنم کاربر کاراکتر غیر مجاز رو توی متن وارد کرده یا نه؟

یه سوال دیگه :
توی یک مشکل مشابه، متن طولانیی رو که توش کد html هست رو در یک فیلد ntext قرار دادم
این بار این ارور پایین را میده و مثل دفعه قبل اجازه پاک کردن یا ویرایش فیلد رو نمیده.
string or binary data would be truncated
the statement has been terminated
این اشکال از کجاست؟باز هم کاراکتر غیر مجاز مشکله من؟برای حلش چیکار باید بکنم؟

kashaneh
شنبه 13 مهر 1387, 23:28 عصر
خوشحالم مشكل اوليه شما حل شد. در مورد پيشگيري هم بگم كه يه سري كاراكترهاي مهم هستند كه بايد از ثبت اونا جلوگيري بشه به اين شرح هستند :
] [ ' '' ; %

براي تست اونها هم مي توني به اين ترتيب عمل كنيد. با فرض اينكه شما يه فيلدي داري به نام Username كه مي خواي بعد از اينكه كاربر فرم رو تاييد كرد قبل از ثبت اونو پردازش كني :


Dim Username
Username = Request.Form("Username")
if instr(Username,"""") > 0 or instr(Username,"'") > 0 or Username= "" or Username= " " or instr(Username,"[") > 0 or instr(Username,"]") > 0 Then

/////////// پيغام خطا

Else

////////// ثبت اطلاعات

End if

البته همونطور كه مي بينيد تمام كاراكترهاي غيرمجاز چك نشدند و فقط مهم ترها هستن كه خودتون مي تونيد ساير مقادير غير مجاز ديگه رو هم چك كنيد.

در مورد سوال دومتون هم اگه انجمن Sql Server رو جستجو كنين به احتمال زياد جواب رو اونجا مي گيرين. موفق باشيد.