我正在使用MS Access 2013创建一个C#windows登录表单。 使用用户ID(自动编号)和密码(短文本)登录表单。 我的问题在于,每次单击LOGIN按钮时都会崩溃(或者我猜是语法错误)而我无法追踪问题,因为我还缺乏编程经验。
表用户
字段:user_Id(自动编号),密码(短文本),名称(短文本),类型(编号)
private void btn_Login_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(txt_UserId.Text))
{
lbl_warningUser.Visible = true;
lbl_warningUser.Text = "User ID is Empty";
}
if (string.IsNullOrEmpty(txt_Password.Text))
{
lbl_warningPass.Visible = true;
lbl_warningPass.Text = "Password is Empty";
}
if (txt_UserId.Text !="" & txt_Password.Text != "")
{
string constring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Database/Health.accdb;";
string query = ("SELECT COUNT(*) FROM User WHERE user_Id = @ID AND password = @Pass");
using (OleDbConnection con = new OleDbConnection(constring))
using (OleDbCommand cmd = new OleDbCommand(query, con))
{
con.Open();
cmd.Parameters.AddWithValue("@ID", txt_UserId.Text);
cmd.Parameters.AddWithValue("@Pass", txt_Password.Text);
int result = (int)cmd.ExecuteScalar();
if (result > 0)
{
MessageBox.Show("Successfully Login");
con.Close();
this.Hide();
MainUI m = new MainUI();
m.Show();
}
else
{
MessageBox.Show("Incorrect User ID or Password");
}
con.Close();
}
}
}
catch (Exception ex)
{
MessageBox.Show(" "+ex);
}
}
答案 0 :(得分:1)
User
是MS Access中的保留字,因此您需要将其包装在方括号分隔符中。此外,您可能需要为COUNT函数结果指定别名:
"SELECT COUNT(*) AS qtyUsers FROM [User] WHERE user_Id = @ID AND password = @Pass"
答案 1 :(得分:0)
txt_UserId.Text
有一个默认的字符串返回值,您是否将该值转换为整数然后尝试实际自动编号为整数。
首先转换您的值并尝试
Convert.ToInt32(txt_UserId.Text)