C# 根据Access数据库检查用户输入
我一直在尝试创建一个查询,以检查输入的PayrollNo是否已经存在于数据文件中,如果已经存在,则通过按钮BtnContinue将用户发送到其他表单。我已经被困了几天,所以任何帮助都将是巨大的,因为我毫无疑问已经接近我需要的地方 代码如下,待执行。在BTN上单击“继续”C# 根据Access数据库检查用户输入,c#,.net,ms-access,C#,.net,Ms Access,我一直在尝试创建一个查询,以检查输入的PayrollNo是否已经存在于数据文件中,如果已经存在,则通过按钮BtnContinue将用户发送到其他表单。我已经被困了几天,所以任何帮助都将是巨大的,因为我毫无疑问已经接近我需要的地方 代码如下,待执行。在BTN上单击“继续” private void BtnContinue_Click(object sender, EventArgs e) { OleDbConnection conn = new OleDbConnection(@"Prov
private void BtnContinue_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\HoliPlanData.accdb;Persist Security Info=False");
using (OleDbConnection Connstring = new OleDbConnection())
{
conn.Open();
String query = ("SELECT count(*) as PayrollNo FROM [Employee] where PayrollNo = @PayrollNo");
OleDbCommand dbCmd = new OleDbCommand(query, conn);
using (OleDbDataReader reader = dbCmd.ExecuteReader())
{
if (reader.Read())
{
PayrollExists form = new PayrollExists();
form.Tag = this;
form.Show(this);
Hide();
}
else
{
EmployeeDetails form = new EmployeeDetails();
form.PassValueFirstName = txtFirstName.Text;
form.PassValueLastName = txtLastName.Text;
form.PassValuePayrollNo = txtPayrollNo.Text;
form.Tag = this;
form.Show(this);
Hide();
}
}
}
就像我说的,我已经在这上面呆了一段时间了,所以任何帮助都会非常出色。据我所知,您从未将@PayrollNo参数及其值添加到您的命令中
另外,使用而不是ExecuteReader会更好,因为查询返回一列一行
dbCmd.Parameters.Add("@PayrollNo", OleDbType.Integer).Value = yourPayrollNo;
// I assumed your column type is Integer
然后像这样检查它
int count = (int)dbCmd.ExecuteScalar();
if(count > 0)
{
// Exist
}
Connstring连接似乎不必要,因为您从未在代码中使用它。将其替换为上面一行定义的conn
作为一个完整的例子
var conStr = @"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\HoliPlanData.accdb;Persist Security Info=False";
using(var conn = new OleDbConnection(conStr))
using(var dbCmd = conn.CreateCommand())
{
dbCmd.CommandText = "SELECT count(*) FROM [Employee] where PayrollNo = @PayrollNo";
dbCmd.Parameters.Add("@PayrollNo", OleDbType.Integer).Value = yourPayrollNo;
conn.Open();
int count = (int)dbCmd.ExecuteScalar();
if(count > 0)
{
PayrollExists form = new PayrollExists();
form.Tag = this;
form.Show(this);
Hide();
}
else
{
EmployeeDetails form = new EmployeeDetails();
form.PassValueFirstName = txtFirstName.Text;
form.PassValueLastName = txtLastName.Text;
form.PassValuePayrollNo = txtPayrollNo.Text;
form.Tag = this;
form.Show(this);
Hide();
}
}
顺便说一下。将参数添加到OleDbCommand时,唯一重要的是它们的顺序。因为您的示例中只有一个参数,所以这不是问题,但请注意。如何更改代码以使其有效工作?@Josh您可以在代码中添加其他代码行。Soner,我正在使用您提供的行,但在“cmd”上出现了一个错误当前行中不存在名称“cmd”context@Josh我添加了一个完整的示例。看一看。同样的一行,cmd,抛出了一个错误,是否有一个using.system或我需要的东西?两个连接实例?@UweKeim是的,看起来Connstring从未在OP的代码中使用过conn应该用using语句包装,而不是它: