PDA

View Full Version : بررسی اطلاعات و اجرای دستور



bitcob589
جمعه 25 فروردین 1391, 21:17 عصر
با سلام
در یک فرم یک dropdownlist وجود دارد چند سوال در آن پرسیده شده است و کاربر هر سوال انتخاب کرد باید جواب آن سوال را در تکس باکس بنویسید اگر کاربر به جواب درست داد اطلاعات در دیتابیس ذخیره شود ضمنا جواب سوالات در دیتابیس است و واگر جواب غلط بدهد اطلاعات وی ذخیره نشود نحوه نوشتن دستور به چه صورتی است

dorparasti
جمعه 25 فروردین 1391, 21:40 عصر
جدای از اینکه ایا این روش مناسب است یا نه ... 2 راه حل دارید . اولی اینه که قبل از ثبت اطلاعات در یک کوئری جداگانه صحیح بودن جواب کاربر رو چک کنید . روش دوم که بهتره اینه که مقدار جواب کاربر رو همراه با اطلاعاتی که باید ثبت شوند به دیتابیس بفرستید و در سمت دیتابیس اول صحیح بودن جواب رو چک کنید بعد در صورت صحیح بودن جواب اطلاعات رو ثبت کنید . مزیت روش دوم اینه که تنها در قالب یک درخواست به دیتابیس می تونید هر دو عملیات رو انجام بدید .

bitcob589
جمعه 25 فروردین 1391, 21:52 عصر
روش اول بهتر است به دلیل اینکه یک بار چک می کند اگر جواب صحیح بود اطلاعات را ذخیره می کند
اگر امکان دارد نحوه اجرای آن بفرمایید که به چه صورتی نوشته می شود

dorparasti
جمعه 25 فروردین 1391, 22:32 عصر
خوب . در ساده ترین حالت نیار به 2 تابع دارید . یکی برای بررسی صحیح بودن جواب کاربر مثلاً CheckAnswer و یکی هم برای ثبت اطلاعات در صورت صحیح بودن جواب کاربر Save . در تابع اول باید یک اتصال به دیتابیس بسازید و ID سوال انتخاب شده و جواب کاربر رو به عنوان پارامتر ارسال کنید . مقدار بازگشتی کوئری می تونه صفر برای جواب غلط و یک برای جواب صحیح باشه .

یک روش برای نوشتن کوئری و چک کردن جواب کاربر

select Count(*) from MyTable where ID=@QuestionID and Answer=@YourAnswer



if (int) cmd.ExecuteScalar() == 1
return true;
else return false;



البته یک روش دیگه هم اینه که مقدار جواب رو بر اساس سوال انتخاب شده از دیتابیس بگیرید و در کدتون اون رو با جواب کاربر مقایسه کنید .


select Answer from MyTable where Id=@Id



if (string) cmd.ExecuteScalar() == AnswerTextBox.Text
return true;
else return false;


حالا اگر تابع CheckAnswer مقدار true رو برگردونه تابع Save رو فراخوانی می کنید . اما توجه داشته باشید که لزوما اینها تنها راه های اجرای این کار نیستند و بهینه هم نیستند . فقط مثال هستند .

farooh
دوشنبه 12 تیر 1391, 11:11 صبح
من این کد رو دارم برای بررسی نام کاربری و پسورد:::
protected void Btn_submit_Click(object sender, EventArgs e)
{
OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|drugdb.accdb");

OleDbCommand cmd = new OleDbCommand("select count(*) from users where uid=" +Txt_uid.Text +" and pwd="+Txt_pwd.Text+"", con);


con.Open();

if ((Int32) cmd.ExecuteScalar()!=0 )
{

FormsAuthentication.RedirectFromLoginPage(Txt_uid. Text, Chk_member.Checked);
}
else if ((Int32)cmd.ExecuteScalar() == 0)
{

Label1.Visible = true;


}
}

اما موقع وارد کردن نام و رمز و کلیک کردن این خطا رو میده::
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.OleDb.OleDbException: No value given for one or more required parameters
کسی می تونه کمکی بکنه؟