嗨,我有一個Windows窗體應用程序,需要根據提供的登錄證書打開不同的頁面。如果提供管理員證書(即用戶名=管理員),則稱爲「AdminPage」的窗體表單應用程序應該被調用爲Up。否則應該叫做「Main_Page」的窗體表單應用程序。如何根據登錄憑證設置特定的「登錄後選項」?
我的代碼給我提示「與此命令關聯的DataReader仍處於打開狀態,必須先關閉它」。
這是我的代碼;
try
{
SqlConnection cn = new SqlConnection("Data Source=PV10\\LOCALSERVER;Initial Catalog=SmallSoftwareDB;Integrated Security=True;Pooling=False");
SqlCommand cmd = new SqlCommand("select * from UserCredentials where Username='" + textBox1.Text + "' and Password='" + textBox2.Text + "'", cn);
SqlDataReader dr;
cn.Open();
dr = cmd.ExecuteReader();
int cnt = 0;
while (dr.Read())
{
cnt++;
}
if (cnt == 1)
{
MessageBox.Show("Successful Login...", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
string query = "select Username, Password from UserCredentials where Username='Administrator";
SqlCommand cmdA = new SqlCommand(query, cn);
dr = cmdA.ExecuteReader();
int k = 0;
while(dr.Read())
{
k++;
}
if(k == 1)
{
AdminPage A_P = new AdminPage();
A_P.Tag = this;
A_P.Show(this);
Hide();
}
Main_Page Mp = new Main_Page();
Mp.Tag = this;
Mp.Show(this);
Hide();
cn.Close();
textBox1.Clear();
textBox2.Clear();
}
else
{
MessageBox.Show("Invalid UserName or Password", "Message", MessageBoxButtons.RetryCancel, MessageBoxIcon.Warning);
textBox1.Clear();
textBox2.Clear();
}
}
catch (Exception err)
{
MessageBox.Show(err.Message, " ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
你很容易被SQL注入,在文本框中放一個'''看看會發生什麼。改爲使用參數化查詢。 –