好的,我是新手c#和SQL学习者。
我有一个连接到SQL Server数据库的登录表单。它早在我的VS 2010上工作(Adm_page表单和main_page表单正在显示),今天它停止显示只显示准备就绪的IDE。
以下是代码:
String query = "Select Count(*) from Login where Username ='" + Usn_txt.Text + "'and Password ='" + Psw_txt.Text + "' and Mode ='" + comboBox1.Text + "';";
SqlConnection con = new SqlConnection(con_string);
SqlDataAdapter da = new SqlDataAdapter(query, con);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
{
SqlDataAdapter da1 = new SqlDataAdapter("Select Mode from Login Where Username ='" + Usn_txt.Text + "'and Password ='" + Psw_txt.Text + "'", con);
DataTable dt1 = new DataTable();
da1.Fill(dt1);
if (dt1.Rows[0][0].ToString() == "Admin")
{
this.Hide();
Adm_page aa = new Adm_page(Usn_txt.Text);
aa.ShowDialog();
Usn_txt.Clear();
Psw_txt.Clear();
this.Show();
}
else if (dt1.Rows[0][0].ToString() == "Student")
{
Main_page mm = new Main_page();
mm.ShowDialog();
this.Hide();
Usn_txt.Clear();
Psw_txt.Clear();
this.Show();
}
}
else
{
MessageBox.Show("Username and Password Error");
}
正如我之前所说,表格一直显示到今天它停止时。 我意识到它与嵌套的if语句有关,因为当我只运行它时
String query = "Select Count(*) from Login where Username ='" + Usn_txt.Text + "'and Password ='" + Psw_txt.Text + "' and Mode ='" + comboBox1.Text + "';";
SqlConnection con = new SqlConnection(con_string);
SqlDataAdapter da = new SqlDataAdapter(query, con);
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows[0][0].ToString() == "1")
{
this.Hide();
Adm_page aa = new Adm_page(Usn_txt.Text);
aa.ShowDialog();
Usn_txt.Clear();
Psw_txt.Clear();
this.Show();
}
表单显示。
还有其他方法可以解决此问题或绕过此问题。请帮帮我?
答案 0 :(得分:0)
根据您的评论和代码,您似乎无法获得数据库所期望的值。这就是为什么我要你调试你的代码,因为那时你会看到你得到的值,代码的哪些分支被执行等等。学习如何调试应用程序非常重要......
这些部分显然被评估为false
:
if (dt1.Rows[0][0].ToString() == "Admin")
和
else if (dt1.Rows[0][0].ToString() == "Student")
这可能是由于DB值与内联c#常量不匹配造成的,因为比较这样的值区分大小写。或者您可能添加了一个不适合这些条件的新模式。
代码永远不会停止工作,总是用户以某种方式参与其中。所以再一次 - 在Visual Studio中放置一个断点,仔细检查步骤,看看你得到了什么样的价值,看看窗帘后面究竟发生了什么。我们不能为你做那件事。
我还会在这里发表您对您的代码的评论,因此它更加清晰明了:
代码问题
例如,您通过将多个值连接在一起来在线构造sql查询。这可能会导致SQL注入(如果我们讨论Web开发)和sql命令中的各种拼写错误。你必须处理多个引号,注意关闭每个支撑等。当参数的数量增加时,代码变得非常快,并且维护成问题。接下来,将UI代码,SQL访问和可能的业务逻辑混合到一个文件中。现在你应该研究WPF,因为Webforms有点过时,非常非常笨重。
此外,我真的主张反对使用DataTables,DataSet等,因为它使重构成为一场噩梦。这对某些场景来说很好,但我真的不喜欢它们而更喜欢具体对象的集合。当您查看代码并查看列表时,您可以立即看到正在发生的事情。但是当你必须处理像dt.Rows [0] [0]这样的代码时..哦,亲爱的,那太可怕了。
您应该考虑处理处理外部资源的对象。它可能暂时不会给您带来问题,但学习最佳实践并使用它们是个好主意。 Tim Schmelter在这里很好地回答了这个问题:How should I correctly dispose of an object?