根据 Access 数据库检查用户输入
Posted
技术标签:
【中文标题】根据 Access 数据库检查用户输入【英文标题】:Checking user input against Access database 【发布时间】:2016-02-19 14:26:20 【问题描述】:我一直在尝试创建一个查询来检查输入的 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();
就像我说的那样,我已经坚持了一段时间,所以任何帮助都会很棒
【问题讨论】:
两个连接实例? @UweKeim 是的,看起来Connstring
从未在 OP 的代码中使用过 conn
应该用 using
声明而不是它:)
【参考方案1】:
据我所知,您从不添加您的 @PayrollNo
参数,它对您的命令很有价值。
同时使用ExecuteScalar
而不是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
does not support named parameters。当您向OleDbCommand
添加参数时,唯一重要的是它们的顺序。由于您的示例中只有一个参数,因此这不是问题,但请注意。
【讨论】:
如何更改我的代码以使其有效工作? @Josh 你会在你的代码中添加额外的代码行。 Soner,我正在使用您提供的线路,但在 'cmd' 上出现错误,当前上下文中不存在名称 'Cmd' @Josh 我添加了一个完整的例子。看看吧。 再次在同一行,cmd,抛出一个错误,是否有 using.system 或我需要的东西?以上是关于根据 Access 数据库检查用户输入的主要内容,如果未能解决你的问题,请参考以下文章