سه شنبه ۱۱ اردیبهشت ۰۳

ایجاد کوئری های پارامتربندی شده درADO.NET

مرجع رسمي مقاله هاي طراحي اپليكيشن اندرويد در مشهد

ایجاد کوئری های پارامتربندی شده درADO.NET

۳۱ بازديد
در شرایطی که AgeField.Text خالی باشد، طراحی اپلیکیشن در مشهد یا رایا پارس این که دربردارنده مقدار غیرعددی باشد، فیلد Age مقر داده به صدق تهیه نخواهد شد، و کوئری باخت میخورد.
در صورتی یک هکر "0AND Password = ' abc123'" را در فیلد ورودی AgeField بنویسد، غرض کوئری را تغییر تحول خواهد بخشید و مقر داده را برای سوءاستفاده گشوده می نماید. این حمله "SQL Injection Attack" میباشد که شما در باب آن زیاد شنیده اید.
بالاتر از این مسائل داده ای، کوئری مفاد مرتبط با عملکرد را نیز مشتمل بر میشود، به خصوص در سطح مقر داده. برخی از مقر اطلاعات مثل SQL Server، کوئری های وارداتی را از روش فرایند کامپایل ارسال می نمایند. مقر داده هر کوئری را ذخیره می نماید و ورژن کامپایل گردیده را وقتی که درخواستی برای به عبارتی کوئری ارسال میگردد، مجدد به کارگیری می نماید. با جاسازی متن ارائه گردیده به وسیله مخاطب در بدنه کوئری، احتمال پاره ای وجود داراست یا این که ابدا احتمال ندارد که کوئری گذشته مجدد استعمال شود، و نیاز به تجزیه کوئری و کامپایل شدن ارتقاء یابد.
واضح میباشد که شیوه حلی برای این خلل وجود دارااست: کوئری های پارامتربندی گردیده (parameterized queries). اینگونه کوئری هایی بدنه کوئری را از مقادیر داده های مدیر گردیده به وسیله آن کوئری غیروابسته می نماید، و انتظارات نوع داده را بر روی آن مقادیر ایفا می نماید. این مراحل با جایگزینی مقادیر hardcoded در متن کوئری placeholderها شروع میشود، هرکدام با نشان "@" استارت می گردند:
string sqlText = @"UPDATE Customer
SET Name = @NewName, Age = @NewAge
WHERE ID = @RecordID";
SqlCommand dbCommand = new SqlCommand(sqlText, existingSqlConnection);
فورا همگی چیز بی آلایش خیس می گردد. قدم بعدی یک قسمت نو میباشد، به کار گیری از پارامترها برای ارائه منبع مقادیر اطلاعات که عاقبت موتور مقر داده در جای های placeholder قرار میدهد. هر پارامتر به شیء امر ADO.NET از روش تیم Parameters اضافه می گردد. بی آلایش ترین رویه برای اضافه کردن یک مقدار به این موسسه از روش روال AddWithValue میباشد:
dbCommand.Parameters.AddWithValue("@RecordID", CustomerID);
یک فرمت مصرح خیس، مثال new SqlParameter را به طور دستی درج می نماید، و بعداز آنکه اعضای آن به صدق تهیه و تنظیم شدند آن را به تیم اضافه می نماید:
dbCommand.Parameters.Add(new SqlParameter("@RecordID", CustomerID));
پارامترها راه‌های بخش اعظمی را به شما ارائه می‌دهند تا اطلاعات را پیش از ارسال به مقر داده دست کاری نمائید. در اینجا کدهایی که فیلدهای nullable را مبنی بر نوع ورودی استفاده کننده رئیس می‌نماید مو جود میباشد:
SqlParameter oneParam = new SqlParameter("@NewAge", SqlDbType.Int);
if (int.TryParse(AgeField.Text, out int age) == true)
oneParam.Value = age;
else
oneParam.Value = System.DBNull.Value;
dbCommand.Parameters.Add(oneParam);
کوئری های پارامتربندی گردیده نیز می‌توانند با stored procedureها در سطح مقر داده گزینه به کارگیری قرار گیرند، هر یک‌سری قبل از آن بایستی کوئری را آگاه سازید.
// ----- Placeholders are not required, just the procedure name.
dbCommand.CommandType = CommandType.StoredProcedure;
dbCommand.CommandText = "ProcedureNameGoesHere";
در شرایطی‌که پارامتر stored procedure تنها بخواهد اطلاعات را گشوده گرداند، خصوصیت Direction شیء پارامتر، هدایت مسیر را مهیا می نماید.
oneParam.Direction = ParameterDirection.Output;
// ----- Then, when running the query:
dbCommand.ExecuteReader();
long newID = Convert.ToInt64(dbCommand.Parameters["@OutputID"].Value);
ADO.NET متن کوئری و گروه پارامترها را به مقر داده به طور اجزای مستقل‌ای از درخواست پردازش کلی ارسال می نماید، و با شایسته ترین نحوه برای ترکیب آن‌ها جهت ایمنی و سعی، آنها‌را به مقر داده ارسال می نماید. و شما‌را از نگرانی در زمینه‌ی سرگردانی اطلاعات و ایمنی در قبال هکرها رها می سازد.
تا كنون نظري ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در رویا بلاگ ثبت نام کرده اید می توانید ابتدا وارد شوید.