Jos*_*osh -1 .net c# ms-access
我一直在尝试创建一个查询来检查输入的PayrollNo是否已经存在于数据文件中,如果是,则按钮(BtnContinue)将用户发送到另一个表单.我已经被困了几天所以任何帮助都会很棒,因为我毫无疑问接近我需要的地方.
代码如下,为exe.在BtnContinue_Click上
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
就像我说现在已经坚持了一段时间所以任何帮助都会很棒
据我所知,你永远不会添加你的@PayrollNo参数,它的值是你的命令.
也可以使用ExecuteScalar而不是ExecuteReader更好,因为您的查询返回一行一行.
dbCmd.Parameters.Add("@PayrollNo", OleDbType.Integer).Value = yourPayrollNo;
// I assumed your column type is Integer
Run Code Online (Sandbox Code Playgroud)
检查一下;
int count = (int)dbCmd.ExecuteScalar();
if(count > 0)
{
// Exist
}
Run Code Online (Sandbox Code Playgroud)
并且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();
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,OleDbCommand也没有支持命名的参数.当您添加参数时OleDbCommand,唯一的问题是他们的订单.由于您的示例中只有一个参数,因此这不是问题,但请注意它.