我正在Visual Studio 2010 C#和MySQL中创建一个应用程序,用户可以在其中添加,编辑和查看员工。我已经完成了添加和查看部分。但是我对编辑感到困惑。我在我的表单中有这个listView,它显示添加到数据库的所有员工。我想要的是,每当用户选择一个员工并单击编辑按钮时,我希望保存在数据库中的值显示在listView下面的相应文本框中。有人能告诉我怎么做这个吗?请
截图:
listView的代码:
private void getEmployee()
{
listViewEmployee.Items.Clear();
string cmd = "select employee_number, employee_lastname, employee_firstname, employee_middlename, employee_position, employee_datehired from employee";
DBConn db = new DBConn();
DataTable tbl = db.retrieveRecord(cmd);
foreach (DataRow row in tbl.Rows)
{
ListViewItem lv = new ListViewItem(row[0].ToString());
lv.SubItems.Add(row[1].ToString() + ", " + row[2].ToString() + " " + row[3].ToString());
lv.SubItems.Add(row[4].ToString());
lv.SubItems.Add(row[5].ToString());
listViewEmployee.Items.Add(lv);
}
}
private void textBoxSearchEmployee_TextChanged(object sender, EventArgs e)
{
string cmd = "SELECT employee_number, employee_lastname, employee_firstname, employee_middlename, employee_position, employee_datehired FROM employee where employee_lastname Like '" + textBoxSearchEmployee.Text + "%'";
listViewEmployee.Items.Clear();
DBConn db = new DBConn();
DataTable tbl = db.retrieveRecord(cmd);
foreach (DataRow row in tbl.Rows)
{
ListViewItem lv = new ListViewItem(row[0].ToString());
lv.SubItems.Add(row[1].ToString() + ", " + row[2].ToString() + " " + row[3].ToString());
lv.SubItems.Add(row[4].ToString());
lv.SubItems.Add(row[5].ToString());
listViewEmployee.Items.Add(lv);
}
}
答案 0 :(得分:2)
当用户按下“编辑”按钮时......
SELECT
获取所选员工的信息例如,
String employee = listViewEmployee.Text;
String cmd = "SELECT * FROM employee WHERE employee_lastname='" + employee + "'";
DBConn db = new DBConn();
DataTable tbl = db.retrieveRecord(cmd);
txtLastName.Text = tbl.Rows[0][0];
// ...
// etc.
注意:将值连接到SQL查询是一个坏主意,因为如果值是恶意的,则可以执行不同的查询。例如,如果employee
的值为x' OR '1'='1; DROP TABLE employee; --
或某些行,则可以删除employee表。解决这个问题的方法是使用Stored Procedures或参数化查询。
答案 1 :(得分:2)
在我看来,您只能填充listView
。
一些指示:
1)现在编写SQL语句的方式很容易SQL Injection。在SQL命令中使用参数,而不是直接将变量连接到查询。有关如何操作的示例,请参阅this question。
2)根据您的其他相关数据的位置(即,如果您的数据库已规范化),您可能需要在查询中加入。
string sqlQuery = "SELECT * FROM employee
JOIN other_employee_data_table on other_employee_data_table.employeeID = employee.ID
WHERE employee.employee_lastname LIKE @employee_lastname +'%'"
但是如果您的employee
表包含所有数据,则无需进行连接。只需从该表中获取所有相关信息。
3)获得所需的所有信息后,只需阅读这些数据并将其分配到各自的领域即可。
伪代码:
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = sqlQuery;
command.CommandType = System.Data.CommandType.Text;
// add parameters in this line
using (MySqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
// iterate in each row
for (int i = 0; i < reader.FieldCount; i++)
{
// iterate each column using reader.GetValue(i)
}
}
}
}