PDA

View Full Version : سوال: خواندن یوزر نیم و پسورد از تیبل !



vB.N3T
پنج شنبه 09 آذر 1391, 21:15 عصر
سلام
دوستان یه فرم لاگین داریم که یوزر نیم و پسورد رو از کاربر میگیره
و یه تیبل داریم که فیلد username password داره و
یوزر نیم و پسورد هر دو داخل تیبل admin هست
حالا تو فرم لاگین چه کدی باید بنویسیم که چک کنه یوزر نیم و پسورد وارد شده صحیح هست !

hosaini
پنج شنبه 09 آذر 1391, 21:40 عصر
سلام
یه اسکالر کوئری بزن مقدار را برگردون بعدش صحتشو برسی کن
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BehComponents;

namespace LoabIranCo.Forms
{
public partial class frmLogin : Form
{
public frmLogin()
{
InitializeComponent();
}

private short trys = 0;
private void glassPanel1_Paint(object sender, PaintEventArgs e)
{

}

private void buttonX2_Click(object sender, EventArgs e)
{
GC.Collect();
Application.ExitThread();
}

private void frmLogin_Load(object sender, EventArgs e)
{
textBoxX1.Focus();
int PintSessionID = 0;
try
{
PintSessionID = Convert.ToInt32(a08TableAdapter.SP0218());
}
catch
{
if (PintSessionID <= 50)
{
this.LabelServerNotFound.Visible = true;
MessageBoxFarsi.Show("باتوجّه به اینکه ارتباط با سِرویس دهندۀ اصلی برقرارنشد، از نرم افزار خارج می شوید",
"سرویس دهنده", MessageBoxFarsiButtons.OK, MessageBoxFarsiIcon.Error);
Application.ExitThread();
}
}
//this.a02TableAdapter.Fill(this.a01DataSet.A02);
//this.a08TableAdapter.Fill(this.a01DataSet.A08);
this.view_A02TableAdapter.Fill(this.lobIranTDataSe t.View_A02);
foreach (DataRow LdrChangeRow in lobIranTDataSet.View_A02.Rows)
{
LdrChangeRow.SetField("A02A03",
AS.GetHashDehashString(LdrChangeRow.Field<string>("A02"), AS.GstringHashMode,
false, (AS.GstringHashKey == null) ? "" : AS.GstringHashKey)
+ ' ' +
AS.GetHashDehashString(LdrChangeRow.Field<string>("A03"), AS.GstringHashMode,
false, (AS.GstringHashKey == null) ? "" : AS.GstringHashKey));
}

}

private void FillFieldsOnFly()
{
foreach (DataRow LdrChangeRow in lobIranTDataSet.View_A02.Rows)
{
LdrChangeRow.SetField("A02",
AS.GetHashDehashString(LdrChangeRow.Field<string>("A02A03"), AS.GstringHashMode,
false, (AS.GstringHashKey == null) ? "" : AS.GstringHashKey));
LdrChangeRow.SetField("A03",
AS.GetHashDehashString(LdrChangeRow.Field<string>("A03"), AS.GstringHashMode,
false, (AS.GstringHashKey == null) ? "" : AS.GstringHashKey));
LdrChangeRow.SetField("A04",
AS.GetHashDehashString(LdrChangeRow.Field<string>("A04"), AS.GstringHashMode,
false, (AS.GstringHashKey == null) ? "" : AS.GstringHashKey));
LdrChangeRow.SetField("A07",
AS.GetHashDehashString(LdrChangeRow.Field<string>("A07"), AS.GstringHashMode,
false, (AS.GstringHashKey == null) ? "" : AS.GstringHashKey));
LdrChangeRow.SetField("A08",
AS.GetHashDehashString(LdrChangeRow.Field<string>("A08"), AS.GstringHashMode,
false, (AS.GstringHashKey == null) ? "" : AS.GstringHashKey));
LdrChangeRow.SetField("A09",
AS.GetHashDehashString(LdrChangeRow.Field<string>("A09"), AS.GstringHashMode,
false, (AS.GstringHashKey == null) ? "" : AS.GstringHashKey));
}
}
private void buttonX1_Click(object sender, EventArgs e)
{
trys += 1;
string LstringHashedPassword = AS.GetHashDehashString(textBoxX2.Text, AS.GstringHashMode,
true,
(AS.GstringHashKey == null) ? "" : AS.GstringHashKey);
int LintWich = 0;
//if (Convert.ToBoolean(view_A02TableAdapter.SP0069((in t?)this.comboBoxName.SelectedValue, LstringHashedPassword)))//اگر رمز صحیح بصورت هَش شده مقایسه شده باشد
if (Convert.ToBoolean(view_A02TableAdapter.SP0069(AS. GetHashDehashString(this.textBoxX1.Text, AS.GstringHashMode,
true,
(AS.GstringHashKey == null) ? "" : AS.GstringHashKey), LstringHashedPassword)))//اگر رمز صحیح بصورت هَش شده مقایسه شده باشد
{
LintWich = 1;
}
else if (Convert.ToBoolean(view_A02TableAdapter.SP0069(thi s.textBoxX1.Text, textBoxX2.Text)))//اگر رمز صحیح بصورت ساده مقایسه شده باشد
{
LintWich = 2;
}
if (LintWich != 0)
{
/*
* ذخیرۀ سَراسَریِ شناسۀ کاربر
*/
AS.UserID =
(LintWich == 1) ?
(int?)view_A02TableAdapter.SP0170(AS.GetHashDehash String(this.textBoxX1.Text, AS.GstringHashMode,
true,
(AS.GstringHashKey == null) ? "" : AS.GstringHashKey), LstringHashedPassword)
:
(int?)view_A02TableAdapter.SP0170(this.textBoxX1.T ext, textBoxX2.Text);//ذخیرۀ سَراسَریِ شناسۀ کاربر
/*
* ذخیرۀ سَراسَریِ حقوقِ دَسترسی
*/
AS.masterTrustString =
(LintWich == 1) ?
(string)view_A02TableAdapter.SP0171(AS.GetHashDeha shString(this.textBoxX1.Text, AS.GstringHashMode,
true,
(AS.GstringHashKey == null) ? "" : AS.GstringHashKey), LstringHashedPassword)
:
(string)view_A02TableAdapter.SP0171(this.textBoxX1 .Text, textBoxX2.Text);
try
{
view_A22GTableAdapter.SP0214(lobIranTDataSet.View_ A22G, AS.UserID);
}
catch
{
}
string LstringGroupTrusts;
short LshortLstringGroupTrustsPosition;
int LintLstringGroupTrustsLenght;
string LstringFirstPart;
char LcharMidleCharacter;
string LstringLastPart;
foreach (DataRow LdrChangeRow in lobIranTDataSet.View_A22G.Rows)
{
LstringGroupTrusts = LdrChangeRow.Field<string>("A02A05");
LintLstringGroupTrustsLenght = LstringGroupTrusts.Length;
for (LshortLstringGroupTrustsPosition = 0; LshortLstringGroupTrustsPosition < LintLstringGroupTrustsLenght; LshortLstringGroupTrustsPosition++)
{
if (AS.isTrusted(LshortLstringGroupTrustsPosition, LstringGroupTrusts))
{
LstringFirstPart = (LshortLstringGroupTrustsPosition == 0)
? ""
: AS.masterTrustString.Substring(0, LshortLstringGroupTrustsPosition);
LcharMidleCharacter = LstringGroupTrusts[LshortLstringGroupTrustsPosition];
LstringLastPart = AS.masterTrustString.Substring(LshortLstringGroupT rustsPosition + 1);
AS.masterTrustString = LstringFirstPart +
LcharMidleCharacter + LstringLastPart;
}
}
}

a02TableAdapter.SP0222(AS.UserID, true);//افزایش یک واحد به تعداد دفعات حضورِ فعّال در نِشَستها
this.Close();
}
else
{

//balloonTip1_BalloonDisplaying(null, null);
MessageBoxFarsi.Show("نام کاربری یا گذرواژه نادرست است", "نادرست", MessageBoxFarsiButtons.OK, MessageBoxFarsiIcon.Error);
this.textBoxX2.Focus();
this.textBoxX2.SelectAll();
if (trys >= 3)//از تعداد دفعات مجاز برای تلاش ورود بیشترشده است و خاتمۀ برنامه می باشد
{
Application.ExitThread();
}
return;
}
}

private void frmLogin_Shown(object sender, EventArgs e)
{
textBoxX1.Focus();
AS.masterTrustString = new String(Convert.ToChar(AS.charEven()), 1000);
if (AS.UserID != null)
{

//this.comboBoxName.SelectedValue = AS.UserID;
}
}

private void textBoxX2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
this.buttonX1.Focus();
}
}

private void textBoxX1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
{
this.textBoxX2.Focus();
}
}
}
}

vB.N3T
پنج شنبه 09 آذر 1391, 21:47 عصر
ممنون این کد خیلی زیاده
این رو از اینترنت پیدا کردم

SqlConnection sconn = new SqlConnection("User ID=Username;Password=Password;Initial Catalog=DB Name;Data Source=ServerName/IP");


Form1 formOne = new Form1();


Successful SuccessForm = new Successful();


sconn.Open();


DataSet ds = new DataSet();


SqlDataAdapter da = new SqlDataAdapter("select * from users where username ='" + TxtUsr.Text + "' and password='" + TxtPwd.Text + "'", sconn);


da.Fill(ds);


int count = ds.Tables[0].Rows.Count;


if(count==0)


{


MessageBox.Show("Invalid UserID/Password");


}


else


{


this.Visible = false;


SuccessForm.Visible = true;


}


sconn.Close();



اما این قسمت رو نمیشناسه

int count = ds.Tables[0].Rows.Count;

mhq1368
پنج شنبه 09 آذر 1391, 21:49 عصر
سلام

اول اینا رو تعریف میکنی



SqlCommand com = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
SqlDataAdapter da1 = new SqlDataAdapter();
DataSet ds = new DataSet();
DataTable dt = new DataTable();



بعد تو رویداد کلیک دکمت این رو مینویسی



da = new System.Data.SqlClient.SqlDataAdapter("select * from administrator where user_name=@username", con);
da.SelectCommand.Parameters.AddWithValue("@username", txtusername.Text);
da.Fill(kar.ds,"administrator");
da1 = new System.Data.SqlClient.SqlDataAdapter("select * from administrator where pass=@password", con);
da1.SelectCommand.Parameters.AddWithValue("@password", txtpassword.Text);
da1.Fill(kar.dt);
if (kar.ds.Tables["administrator"].Rows.Count > 0)
{
if (kar.dt.Rows.Count > 0)
{
menu formmenu = new menu();
formmenu.Show();
this.Hide();
}
else
{
MessageBox.Show("رمز عبور وارد شده اشتباه است", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("نام کاربری وارد شده اشتباه است", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

vB.N3T
پنج شنبه 09 آذر 1391, 21:59 عصر
دوست عزیز تو این خط

da.Fill(kar.ds,"administrator");

kar چی هست ؟؟از کجا تعریف شده

vB.N3T
پنج شنبه 09 آذر 1391, 22:21 عصر
این روش کار میکنه اما وقتی میگم form1 که ازش نمونه سازی کردم رو نمایش بده فقط یه لحظه نمایشش میده و بسته میشه؟؟؟؟؟؟؟؟

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace project_uni_azad_
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{


Form1 n = new Form1();
SqlConnection con = new SqlConnection();
con.ConnectionString = "server=localhost;database=workshop;integrated security=true";
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM tbl_admin WHERE username='" + textBox1.Text + "'AND Password='" + textBox2.Text + "'";
SqlDataReader reader = null;
con.Open();
reader = cmd.ExecuteReader();
if (reader.HasRows)
{
reader.Read();

MessageBox.Show("Successfully Logged in");

con.Close();

this.Close();
n.Show();

}

else
{
MessageBox.Show("Username or Password is Wrong");

}

}


}
}

AvantGarde
جمعه 10 آذر 1391, 13:41 عصر
جواب شما خلاصه میشه در:
1- ارتباط با بانک

SqlConnection conn=new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=databaseFullN ame;Integrated Security=True;Connect Timeout=30;User Instance=True");
conn.Open();
2- چک کردن اینکه کاربری با این نام کاربری و رمز در جدول admin وجود دارد یا خیر

SqlCommand cmd = new SqlCommand("select * from admin where username=@user and password=@pass", conn);
cmd.Parameters.Add("@user", SqlDbType.Int).Value = int.Parse(txt_user.Text);
cmd.Parameters.Add("@pass", SqlDbType.NVarChar).Value = txt_pass.Text;
int rowCount = cmd.ExecuteNonQuery();
if (rowCount > 0)
{
//...har kari ke dar sorate dorost budan bayad anjam beshe
}
else
{
//...har kari ke dar sorate dorost Nabudan bayad anjam beshe
}

الف:وجود دارد: پس ضمن حفظ مشخصات کاربر اون رو به فرم مخصوص کاربران عضو هدایت می کنیم(یا هر کاری که باید در صورت درست بودن اطلاعات انجام بشه)
ب: وجود ندارد: پس غلط بودن اطلاعات وارد شده را به کاربر اعلام کن

vB.N3T
جمعه 10 آذر 1391, 14:39 عصر
ممنون خوب بود اینم

اما کد بالا که گذاشتم چرا در صورت درست بودن یوزر نیم و پسورد یه لحظه فرم رو نشون میده و میبندتش

vB.N3T
جمعه 10 آذر 1391, 18:39 عصر
اقای AvantGarde کدی که شما دادی یه مشکلی داره

وقتی اجرا میکنم خطا
ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.
میده

شما تو این خط گفتی
cmd.Parameters.Add("@user", SqlDbType.Int).Value = int.Parse(txt_user.Text);

یوزر نیم باید عد باشه
حالا اگه یوزر نیم admin بود؟؟؟؟

Y_Safaiee
جمعه 10 آذر 1391, 18:53 عصر
دوست عزیز

ساده ترین کد ممکن اینه



using System.Data.SqlClient;
namespace Sample
{
public partial class Form1 : Form
{
SqlConnection cnn=new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;User Instance=True");
SqlCommand cmd;

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
cnn.Close();
cnn.Open();
cmd = new SqlCommand("select count(*) from accounts where username=@user and password=@pass", cnn);
cmd.Parameters.AddWithValue("@user", txt_username.Text);
cmd.Parameters.AddWithValue("@pass", txt_password.Text);
int r = (int)cmd.ExecuteScalar();
if (r != 0)
{
Form2 frm = new Form2();
this.Hide();
frm.Show();
}

else
{
MessageBox.Show("نام کاربری یا رمز عبور اشتباه می باشد","توجه",MessageBoxButtons.OK,MessageBoxIcon.Error);
txt_password.Focus();
}

}


}
}




کد دوستمون AvantGarde هم درسته اما مشکلش اینه که به صورت ExecuteNonQuery برگشت داده که در نتیجه هیچی برگشت داده نمیشه

دوتا فیلد استفاده شده توسط من (Username و Password) که در جدول Accounts هستن از نوع Nvarchar معرفی شدن.

موفق باشی
بایت بایت

vB.N3T
جمعه 10 آذر 1391, 19:08 عصر
ممنون کد شما رو هم امتحان میکنم

اما عجیبه این کد ظاهرا مشکل نداره اما یوزر نیم و پسورد رو درست وارد میکنم میگه صحیح نیست!!!!! کسی میتونه مشکلو پیدا کنه

private void kryptonButton1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = "server=localhost;database=shop;integrated security=true";

frmsabt frmshow = new frmsabt();

con.Open();

DataSet ds = new DataSet();

SqlDataAdapter da = new SqlDataAdapter("select * from tbl_admin where user ='" + txt1.Text + "' and password='" + txt2.Text + "'", con);

da.Fill(ds);

int a = ds.Tables[0].Rows.Count;
if (a == 0)
{

MessageBox.Show("Invalid UserID/Password");

}


else
{

this.Visible = false;


frmshow.Visible = true;


}

con.Close();

}
}
}

vB.N3T
جمعه 10 آذر 1391, 19:20 عصر
دوسا عزیز Youuness کد شما رو اضافه کردم درست شد ! من قبلا نوع فیلدامو به این شکل زده بودم

من یه user دارم با تایپ nchar(10)
یه password با تایپ nvarchar(50)
یه ایدی با تایپ numeric(18, 0)

اما الان
به این شکل تغیر دادم درست شد

یه یوزر نیم با تایپ nvarchar
یه پسورد با تایپ nvarchar

نوع فیلد چه تاثیری داره تو اجرا کد بالا

یه سوال دیگه ای که دارم یه کمی توضیح در مورد این خط که چیکار میکنه
int r = (int)cmd.ExecuteScalar();
if (r != 0)

Y_Safaiee
جمعه 10 آذر 1391, 19:46 عصر
با سلام مجدد

من بهت توصیه میکنم یه فیلد سطح دسترسیم درست کن و تو select سطح دسترسی رو برگردون تا بشه کاربرا رو مدیریت کرد.مثلا یه فیلد به اسم access و از نوع int و داخلش از 0 تا هرچقدر سطح داری بزار مثلا رئیس 0 ,مدیران 1,کارشناسان 2,کارمندان 3 و ...
بعد توسط کد بیا سطح دسترسی رو بگیر و بعد از بررسی اون رو اعمال کن

اینم سمپل کدش :


private void button1_Click(object sender, EventArgs e)
{
try
{
cnn.Close();
cnn.Open();
cmd = new SqlCommand("select access from accounts where username=@user and password=@pass", cnn);
cmd.Parameters.AddWithValue("@user", txt_username.Text);
cmd.Parameters.AddWithValue("@pass", txt_password.Text);
object r = cmd.ExecuteScalar();
if (r != null)
{
switch ((int)r)
{
case 0:
//// محدودیت های رئیس
break;
case 1:
/// اعمال محدودیت های معاون
break;
}

Form2 frm = new Form2();
this.Hide();
frm.Show();
}

else
{
MessageBox.Show("نام کاربری یا رمز عبور اشتباه می باشد", "توجه", MessageBoxButtons.OK, MessageBoxIcon.Error);
txt_password.Focus();
}
}
catch { }

}



حالا جوابهای سوالات:
1.تو user رو nchar(10) تعریف کرده بودی که این اشتباس اولش شاید بیشتر از 10تا نام کاربری بخواد بزاره,بعدم در صورتی که نام کاربری 4 حرفیم بزاره مثلا هادی بقیه فضا فاصله میخوره یعنی اندازه 4 حرف نمیشه و همیشه 10تا حرفه و وقت تستم باید 6تا فاصله به اون نام کاربری 4حرفی اضافه کنی.

2.من تو کد Sql گفتم تعداد سطرهای پیدا شده رو برگردون (Select count(*)) حالا این دستور رو با ExecuteScalar که فرمانیه به این معنی که باید چیزی رو برگشت بدی میفرستم به دیتابیس,مقدار برگشتی از دیتابیس به صورت Object هست اما من تعداد رو میخوام که باید از نوع int باشه پس میام اونو تبدیل به int میکنم.

اگه نام کاربری و رمز عبور من اشتباه باشه بهم 0 برگشت داده میشه (یعنی صفرتا پیدا شده) اما اگه صحیح باشه یک عدد برمیگردونه(یا این رمز عبور و نام کاربری یک رکورد پیدا شد) پس من میام r رو بررسی میکنم اگه نامساوی با صفر باشه یعنی رکوردی پیدا شده.

موفق باشی
بایت بایت