PDA

View Full Version : UserName و Password در یک برنامه



D.TAGHDISI
چهارشنبه 02 مرداد 1387, 00:52 صبح
با سلام :
من در یک برنامه که بانک آن SQL Server میباشد نام کاربر و کلمه عبور ذخیره کرده ام در زمان اجرا برنامه نام کاربر و کلمه عبور را از کاربر دریافت می کنم ولی نمی توانم صحت آن را در بانک مشخص کنم اگر ممکن است با نوشتن یک قطعه کد من را راهنمایی کنید.

با تشکر :افسرده:

نهمنهح
چهارشنبه 02 مرداد 1387, 08:28 صبح
سلام
باید این دستور sql را اجرا کنی :
SELECT * FROM table_name WHERE username= texbox1.Text AND pass = textbox2.Text

نهمنهح
چهارشنبه 02 مرداد 1387, 08:32 صبح
کد کامل :


private void btnEnter_Click(object sender, EventArgs e)
{
string _CommandText = "SELECT * FROM athenticate where id_personel= " + txtId.Text +
" AND pass= '" + txtPass.Text + "'";
try
{
objDataAdapter = new SqlDataAdapter(
_CommandText, objConnection);

// Initialize a new instance of the DataSet object...
objDataSet = new DataSet();
// Fill the DataSet object with data...
objDataAdapter.Fill(objDataSet, "athenticate");

// Display Main form...
Main objMain = new Main();
objMain.ShowDialog();

this.Close();
}
catch ( Exception ex)
{
errorProvider1.SetError(btnEnter, "کد کاربری یا رمز عبور اشتباه است");
}
}

top7news
چهارشنبه 02 مرداد 1387, 10:13 صبح
سلام
من پيشنهاد ميکنم با يک DataReader ابتدا بانکت و داده هاي داخل بانک رو Read کني بعد داده هاي ورودي درون textbox هات رو با داده هاي خونده شده از بانک ، مقايشه کني .



SqlDataReader r;
sqlDataAdapter1.SelectCommand.Parameters.Clear();
sqlDataAdapter1.SelectCommand.Parameters.AddWithVa lue("@a1", textBox1.Text);
sqlDataAdapter1.SelectCommand.Parameters.AddWithVa lue("@a2", textBox2.Text);
sqlDataAdapter1.SelectCommand.CommandText = "select * from [table name] where [نام فيلد اول] = @a1 and [نام فيلد دوم]=@a2";
sqlConnection1.Open();
r = sqlDataAdapter1.SelectCommand.ExecuteReader();
r.Read();
sqlDataAdapter1.SelectCommand.Parameters.Clear();
try
{
sqlDataAdapter1.SelectCommand.Parameters.AddWithVa lue("@a3", r[0]);//هر داده اي داخل بانک داراي يه ايندکس که براي خوندن اون داده ها از شماره ايندکس که از صفر شروع ميشه استفاده ميکنميم.
groupBox2.Text = "حق دسترسي کاربر : : " + r[3].ToString();//اينجا من مثلا نوع حق دسترسي کاربر رو مشخص کردم ، شما ميتوني بسته به داده هاي درون بانک چيزهاي ديگه رو بررسي کني
groupBox2.Visible = true;

}
catch
{
msg.Show("پيغام مورد نظر به کاربر", MessageBoxButtons.OK, MessageBoxIcon.Warning);
sqlConnection1.Close();
return;
}

r.Close();
sqlConnection1.Close();

Sajjad.Aghapour
چهارشنبه 02 مرداد 1387, 23:19 عصر
فکر می کنم زیادی طولانی و پیچیدش کردین.این کد کار همون کدهای بالا رو انجام میده.....


SqlDataReader r;
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select * from database where user ='"+txtUser.Text+"' and pass="'+txtPass.Text+"'";
cmd.Connection=conn;
conn.Open();
r = cmd.ExecuteReader();
if (r.Read())
allowAccess = true;
else
allowAccess = false;
r.Close();
conn.Close();

top7news
پنج شنبه 03 مرداد 1387, 15:14 عصر
درسته کد شما بهینه تره ولی من کدهای خودم رو برای فقط نمونه گذاشتم که اگه احیانا دوستمون این روش رو بلد نیست ، یاد بگیره .

اَرژنگ
پنج شنبه 03 مرداد 1387, 18:00 عصر
درسته کد شما بهینه تره ولی من کدهای خودم رو برای فقط نمونه گذاشتم که اگه احیانا دوستمون این روش رو بلد نیست ، یاد بگیره .

همه کدهایه فرستاده شده همه چی را اسپاگتی با هم پیچیده ، در اصل همه‌شان در یک حد زیاده قاطی شدند.

جان هر کی که دوست دارین این گونه کدهایه قاطی پاطی به تازه کارها ندین، این بارها اینجا تکرار شده، کلی نمونه براش گذاشتند و بازهم من دوباره تکرار میکنم، لا‌اقل کدهایه اس‌کیو‌ال را از کدهایه منطق برنامه و از کدهایه اینترفیس برنامه جدا کنید، حالا ۳ لایه نمینویسید ننویسید، ولی دیگه ۳ لایه را در یکجا با هم قاطی نکنید، یکمی دیسیپلین بخرج بدین.
به تازه‌کارها کدهایه خراب برایه اینکه مشکل کوچک را حل کنید آخرش بیشتر مشکل میتراشید برایشان.

Sajjad.Aghapour
پنج شنبه 03 مرداد 1387, 18:16 عصر
جناب آرژنگ فرمایش شما کاملا درسته.در اصل اینجور کدها باید به صورت سه لایه نوشته بشه.ولی به قول خودتون تازه کار...بهتر نیست که اصل مشکل برطرف بشه.شما که گفتید 3 لایه ،از خودتون پرسیدید که این دوست به قول شما تازه کار با لایه ها آشنا هستن.اصلا می دونن برنامه نویسی 3 لایه یعنی چی؟؟؟
من با شما اصلا مخالف نیستم.ولی دوست داشتم به جای انتقاد مستقیم ،همون طور که در امضاءتون نوشتید این کدها رو به صورت منظم شده(همون دیسیپلین خودتون) بنویسید تا کاربر تازه واردمون با مقایسه کدها از بالا به پایین به یک کد مطلوب می رسید و اون رو در برنامه به کار می برد......

اَرژنگ
یک شنبه 07 شهریور 1389, 11:48 صبح
جناب آرژنگ فرمایش شما کاملا درسته.در اصل اینجور کدها باید به صورت سه لایه نوشته بشه.ولی به قول خودتون تازه کار...بهتر نیست که اصل مشکل برطرف بشه.شما که گفتید 3 لایه ،از خودتون پرسیدید که این دوست به قول شما تازه کار با لایه ها آشنا هستن.اصلا می دونن برنامه نویسی 3 لایه یعنی چی؟؟؟
من با شما اصلا مخالف نیستم.ولی دوست داشتم به جای انتقاد مستقیم ،همون طور که در امضاءتون نوشتید این کدها رو به صورت منظم شده(همون دیسیپلین خودتون) بنویسید تا کاربر تازه واردمون با مقایسه کدها از بالا به پایین به یک کد مطلوب می رسید و اون رو در برنامه به کار می برد......

انتقاد مستقیم نبود، به اطلاع آوردن اشکال مداومی که تمام تازه کاره بهش برمیخورند و در مثالات فرستاده شده مداوماً به چشم میخوره و بهش اهمیت داده نمیشه، چونکه همانطوری که گفتید سوالات معمولاً در یک مورد دیگری هستند و جمع جور کردن کد و استفاده از اپلیکیشن کانفیگ باید جزو روشهایه پایه برنامه نویسی استفاده بشه (حتی اگر از ۳ لایه نویسی هم استفاده نکنند).
یک لینک به یک برنامه نویسی ۳ لایه (بدانه استفاده از Linq و Entities ):
http://barnamenevis.org/forum/showthread.php?p=952137#post952137

همانطوری که گفتید اصلاً ۳ لایه نویسی را درخاست نکنیم ولی حداقل اینکه
۱.کانکشن استرینگ را در اپلیکیشن کانفیگ قرار بدن و
۲.استفاده از یک کلاس که داتابیس کانکشن را فراهم کند
۳.کدهایه کار کردن با داتابیس را همانطوری که شما فرستادید را در یک قسمت در فرم جمع کنند.
باز هم برایه شروع تازه کارها بهتر است.

Sajjad.Aghapour
یک شنبه 07 شهریور 1389, 21:32 عصر
آرژنگ جان چطور به دوران جاهلی ما برگشتی و زنده اش کردی؟!:لبخندساده:

البته بزرگترین عیبی که در اون کد دیده میشه این هست که Parameterize نیست که همین اون رو Injectable کرده...

اَرژنگ
دوشنبه 08 شهریور 1389, 05:50 صبح
آرژنگ جان چطور به دوران جاهلی ما برگشتی و زنده اش کردی؟!:لبخندساده:

البته بزرگترین عیبی که در اون کد دیده میشه این هست که Parameterize نیست که همین اون رو Injectable کرده...
چه جاهلیتی ؟ نکاتی که گفته بودید درست بود و اگر چیزی درست است باید پیگیری بشه، اگر هم نیست باید تغییرش داد. در این مورد دیدم که اشکالی که قبلاً گرفته بودم درست نبود. پس تنها کاری که میشد کرد این بود که روش یاددادن را عوض کرد.

۱.کانکشن استرینگ را در اپلیکیشن کانفیگ قرار بدن و
۲.استفاده از یک کلاس که داتابیس کانکشن را فراهم کند
۳.کدهایه کار کردن با داتابیس را همانطوری که شما فرستادید را در یک قسمت در فرم جمع کنند.
۴.استفاده از پارامترها
.
.
.
۲۰. ۳ لایه نویسی

شاید به این شکل بتونیم یک لیست گام به گام روشهایه اصولی درست کنیم که بنابرش به تازه‌کارها بشد کمک کرد.