1 回答

TA貢獻1998條經驗 獲得超6個贊
在這里,您可以進行類似于您的實現的內容:
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");
}
}
有幾件事情是不同的,我將解釋它們背后的原因:
我用參數替換了您在SQL上執行的字符串串聯。這是為了避免SQL注入。您是否想知道如果用戶在用戶名或密碼文本框中輸入字符會發生什么?還有更多,請研究這個主題。
'
我正在語句中實例化您的連接。這將確保當我們完成數據庫工作時,您的連接被關閉(處置)。
using
用更精簡的 SqlCommand/SqlDataReader 類替換了 DataAdapter/DataTable。
我以一種可以盡快關閉連接的方式分離了邏輯,并且不會被對MessageBox.Show()的調用中斷。
另外,非常重要的一點是,切勿將密碼作為明文存儲在數據庫中,請對哈希函數以及為什么應該在此上下文中使用它們進行一些研究。
我希望這有幫助。
- 1 回答
- 0 關注
- 86 瀏覽
添加回答
舉報