Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据Access数据库检查用户输入_C#_.net_Ms Access - Fatal编程技术网

C# 根据Access数据库检查用户输入

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

我一直在尝试创建一个查询,以检查输入的PayrollNo是否已经存在于数据文件中,如果已经存在,则通过按钮BtnContinue将用户发送到其他表单。我已经被困了几天,所以任何帮助都将是巨大的,因为我毫无疑问已经接近我需要的地方

代码如下,待执行。在BTN上单击“继续”

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语句包装,而不是它: