我在if else部分需要一些帮助。现在,我的代码显示“if row = 0,user not found”。但我想循环,如果没有检测到任何东西,继续循环,直到事件发生变化。我如何在这里循环?
string strOleDbConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Project.mdb";
string strSqlStatement = string.Empty;
strSqlStatement = "SELECT * FROM jiahe WHERE [Tag ID] = '" + txt + "'";
OleDbConnection objConnection = new OleDbConnection(strOleDbConnectionString);
OleDbDataAdapter objAdapter = new OleDbDataAdapter(strSqlStatement, objConnection);
DataSet ds = new DataSet();
objAdapter.Fill(ds);
DataTable dt = ds.Tables[0];
dataGridView1.DataSource = dt.DefaultView;
if (dt.Rows.Count == 0)
{
MessageBox.Show("Not Found. Please register new user.");
Form2 frm2 = new Form2();
frm2.Show();
}
else
{
string strLine = string.Empty;
string strUser = string.Empty;
foreach (DataRow dr in dt.Rows)
{
string strTags = dr["Tag ID"].ToString();
strUser = dr["User"].ToString();
string strAge = dr["Age"].ToString();
string strPhoneNumber = dr["Phone Number"].ToString();
答案 0 :(得分:5)
只是为了将我的评论扩展到一个答案 - 我觉得这样做的方向是错误的。我会将设计更改为(有点伪代码):
void FindUserOrRegister()
{
User user = GetUserFromDatabase();
if (user != null)
{
new MainApplicationForm(user).Show();
}
else
{
new RegistrationForm().Show();
}
}
然后可能将RegistrationForm
逻辑调用FindUserOrRegister
作为其注册流程的一部分 - 如果用户选择关闭表单,则应关闭整个应用程序(大概)...但是否则,当注册完成后,您可以关闭表单然后再次调用FindUserOrRegister
,然后启动主表单。
或者,注册表可以在注册完成后直接启动主应用程序。
我有点猜测你在这里要做什么,但我做认为它至少值得将数据库代码与UI流分开 - 并尝试在一种更加事件驱动的方式,因为用户将改变你是否应该继续。如果您正在等待其他人将记录添加到数据库中,您可能会更好地使用某种计时器重复查询数据库(在后台线程中 - 线程是您需要的另一个区域了解为了避免在查询数据库时你的UI挂起,顺便说一句,但在这里我认为你不需要。