1 回答

TA貢獻1998條經(jīng)驗 獲得超6個贊
在這里,您可以進行類似于您的實現(xiàn)的內(nèi)容:
private void loginbtn_Click(object sender, EventArgs e)
{
var conString = "ReplaceWithMyConnectionString";
string userRole = null;
using (var con = new SqlConnection(conString))
{
con.Open();
var cm = con.CreateCommand();
cm.CommandType = System.Data.CommandType.Text;
cm.CommandText = "SELECT TOP 1 Role FROM User_Table WHERE eb_number = @eb_number AND and Password = @Password";
cm.Parameters.Add(new SqlParameter("@eb_number", System.Data.SqlDbType.VarChar, 50) { Value = usernametxt.Text });
cm.Parameters.Add(new SqlParameter("@Password", System.Data.SqlDbType.VarChar, 50) { Value = textBox1.Text });
using (var reader = cm.ExecuteReader(System.Data.CommandBehavior.SingleRow))
{
if (reader.Read())
{
userRole = reader["Role"].ToString();
}
}
}
if (userRole != null)
{
this.Hide();
Main ss = new Main(usernametxt.Text, userRole); //usernametxt is passed in to prevent error
ss.Show();
MessageBox.Show("Logged in sucessfully");
}
else
{
MessageBox.Show("Incorrect Username/Password Combination. Try Again");
}
}
有幾件事情是不同的,我將解釋它們背后的原因:
我用參數(shù)替換了您在SQL上執(zhí)行的字符串串聯(lián)。這是為了避免SQL注入。您是否想知道如果用戶在用戶名或密碼文本框中輸入字符會發(fā)生什么?還有更多,請研究這個主題。
'
我正在語句中實例化您的連接。這將確保當(dāng)我們完成數(shù)據(jù)庫工作時,您的連接被關(guān)閉(處置)。
using
用更精簡的 SqlCommand/SqlDataReader 類替換了 DataAdapter/DataTable。
我以一種可以盡快關(guān)閉連接的方式分離了邏輯,并且不會被對MessageBox.Show()的調(diào)用中斷。
另外,非常重要的一點是,切勿將密碼作為明文存儲在數(shù)據(jù)庫中,請對哈希函數(shù)以及為什么應(yīng)該在此上下文中使用它們進行一些研究。
我希望這有幫助。
- 1 回答
- 0 關(guān)注
- 91 瀏覽
添加回答
舉報