我正在尝试创建一个允许某人通过ID搜索确切结果的应用程序,或者如果您不知道该ID,则可以搜索其名称的一部分以返回匹配的帐户。
例如,鲍勃琼斯是身份证A01,你可以搜索A01返回鲍勃琼斯或搜索B返回鲍勃琼斯,布拉德利史密斯e.t.c ......
我已经将ID部分编码得很好,因为某些原因第二部分在实际上是相同的代码时不起作用。
private void btnSaveEmployees_Click(object sender, EventArgs e)
{
{
//First search for the entered text to see if it is an ID
DataBase db = new DataBase(); //Construct a new database.
db.OpenConnection(); //Open our Database connection
MySqlCommand mysqlCmd = new MySqlCommand("SELECT * FROM `employees` WHERE `employee_ID` = @employeeID LIMIT 1", db.connection);
mysqlCmd.Parameters.AddWithValue("@employeeID", txtEmployeeID.Text);
MySqlDataReader reader = mysqlCmd.ExecuteReader(); //Construct a reader
if (reader.Read())
{
//Employee ID has been found so lets update the update form.
Form employee = new UpdateEmployee(reader["firstName"].ToString(), reader["lastName"].ToString(), reader["contactNumber"].ToString(), reader["employee_access_level"].ToString());
employee.Show();
}
else
{
db.CloseConnection();
db.OpenConnection();
MySqlDataReader Reader2;
MySqlCommand mysqlCmd2 = new MySqlCommand("SELECT firstName, LastName FROM `employees` WHERE `firstName` LIKE '"+txtEmployeeID.Text+"';", db.connection);
//mysqlCmd2.Parameters.AddWithValue("@textbox", txtEmployeeID.Text);
Reader2 = mysqlCmd2.ExecuteReader(); //Construct a reader
while (Reader2.Read()==false)
{
listboxFindEmployees.Visible = true;
string thisrow = "";
for (int i = 0; i < Reader2.FieldCount; i++)
thisrow += Reader2.GetValue(i).ToString() + ",";
listboxFindEmployees.Items.Add(thisrow);
}
}
}
}
答案 0 :(得分:2)
乍一看,你需要改变
while (Reader2.Read()==false)
通过
while (Reader2.Read())
虽然条件只允许在没有更多记录要读时进入,但它将无法执行内部逻辑。
你的逻辑还有一些额外的问题需要解决
IDisposable
接口的每个实例(MySqlConnection,MySqlDataReader,MySqlCommand)答案 1 :(得分:1)
这一行:
while (Reader2.Read()==false)
应该是:
while (Reader2.Read())
答案 2 :(得分:0)
你还没有处理过旧的DataReader
。我建议您严格更改所有内容以使用using
块。这摆脱了所有这些问题。 (还在使用块中包含连接。如果在错误的时刻抛出异常,则会泄漏连接或读取器。)