PDA

View Full Version : مبتدی: جستجو در بانک



ahmad14.h
پنج شنبه 18 شهریور 1389, 22:24 عصر
سلام
در هنگام عضویت میخوام اسم کاربری تو بانک کاربران جستجو کنم اگه این نام کاربری وجود نداشت عضویت انجام بشه
نوشتم ولی کار نمیکنه!!!


if (namecheck (TextBox1 .Text )==0)
{
msLabel.Text = "این نام کاربری قبلاً ایجاد شده است";
TextBox1.BackColor = Color.Yellow ;
TextBox1.Focus();

}
else
{
string constr = "Data Source=.\\SQLEXPRESS;Initial Catalog=r;Integrated Security=True";
SqlConnection scon = new SqlConnection(constr);
SqlCommand command = new SqlCommand();
command.Connection = scon;
command.CommandText = "insert into r(accname,name,lname,pass,email)" + "values(@accname,@name,@lname,@pass,@email)";
command.Parameters.AddWithValue("@accname", TextBox1.Text.ToLower());
command.Parameters.AddWithValue("@name", TextBox2.Text.ToLower());
command.Parameters.AddWithValue("@lname", TextBox3.Text.ToLower());
command.Parameters.AddWithValue("@pass", TextBox5.Text.ToLower());
command.Parameters.AddWithValue("@email", TextBox4.Text.ToLower());
scon.Open();
command.ExecuteNonQuery();
scon.Close();
Session ["accname"]=TextBox1 .Text .ToLower ();
Response.Redirect("finish_register.aspx");



این تابع چک کردن نام کاربری هست که کاربر پیشنهاد کرده که میتونه انتخاب کنه یا نه:


int namecheck(string name)
{
string constr = "Data Source=.\\SQLEXPRESS;Initial Catalog=r;Integrated Security=True"; ;
SqlConnection scon = new SqlConnection(constr);
scon.Open();
string selstr = "select * from r";
SqlCommand selmd = new SqlCommand(selstr, scon);
SqlDataReader sdr = selmd.ExecuteReader();
if (sdr.HasRows)
{
sdr.Read();
if (name.ToLower() == sdr["accname"].ToString())
{
return 0;
}
}
return 1;
}

اشتباهش کجاست؟
اگه یه راه دیگه پیشنهاد میکنید لطفا" کامل توضیح بدید من همین یه راه رو به زحمت فهمیدم (که کامل نفهمیدم)
خواهشا" کمک کنید
ممنون

اوبالیت به بو
پنج شنبه 18 شهریور 1389, 22:43 عصر
سلام
به اين صورت تغيير بديد:

تابع چك كردن نام كاربري:


Private bool CheckUserName (string UserName)
{
// Select ... From Users ... WHERE UserName = @UserName
Cmd.Parameters.AddWithValue("@UserName",UserName)
//Fill DataSet

if (DataSet.Table[0].Rows.Count > 0)
return true;
else
return false;
}

و دكمه ارسال يا ثبت نام:


bool isRegister = CheckUserName (txtUserName.Text);
if (isRegister)
{
//Register in DataBase
}
else
{
// this account is available
}

ahmad14.h
جمعه 19 شهریور 1389, 00:22 صبح
من تا حالا با dataset کار نکردم
تازه کارم
فقط همونجوری که نوشتم بهتر میفهمم
مشکل اون چیه اصلاحش کنم؟
اینجوری بهتره

Saman Hashemi
جمعه 19 شهریور 1389, 01:25 صبح
من تا حالا با dataset کار نکردم
تازه کارم
فقط همونجوری که نوشتم بهتر میفهمم
مشکل اون چیه اصلاحش کنم؟
اینجوری بهتره


string selstr = "select * from r";
رشته ای که به عنوان ورودی هست فکر کنم اینجا باید به عنوان شرط مطرح کنی که نکردی

aminghaderi
جمعه 19 شهریور 1389, 02:10 صبح
if (name.ToLower() == sdr["accname"].ToString())
{
return 0;
}





name.ToLower()

چی هست؟؟؟
اگر متغیر هست یا textBox هست ،یه .tostring() هم اضافش کن.


"accname"
به جاش از ایندکس استفاده کن.

maktab
جمعه 19 شهریور 1389, 03:28 صبح
یه پیشنهاد: شما اصلا چک نکنید که کاربر وارد شده تکراری است یا خیر!!! (البته اگر بخواید پس از اتمام ثبت نام اعلام کنه نام کاربری تکراری است)

شما می تونید تابع ارسال اطلاعات را تویه یه try ... cach قرار بدید و توی cach هم مقدار ارور دیتابیس را برگردونه. حالا اگر شماره ارور همان شماره ارور نام کاربری تکراری باشه، سیستم اعلام کنه که نام کاربری وارد شده تکراری است.
این کار را می گم انجام بدید چون خود اس کیو ال هم یکبار این کار را بررسی می کنه (در صورت کلید قرار دادن نام کاربری) پس اگر شما هم توی کدهاتون باز بررسی کنید دوباره کاری می شه!

برای اطلاعات بیشتر (شماره ارور و...) می تونید یه سرچی کنید بخصوص توی قسمت سی شارپ.