c# - C#从texbox访问数据库更新
问题描述
我正在做一个数据库项目,程序的很大一部分已经完成,但遇到了一个问题。我有一个名为员工的数据库,我在文本框中使用 emp_ID 进行搜索,并从数据库中获取属性(姓名、姓氏)并将它们写入另一个文本框。当我单击保存按钮时,我希望它从文本框中更新姓名和姓氏。这是我的代码看起来不错但不起作用。伪代码:从表 Employee 更新姓名和姓氏,其中 ID = emp_ID
错误:
输入字符串的格式不正确。
我的代码:
private void button1_Click(object sender, EventArgs e)
{
String id = searchTB.Text;
string Name = nametb.Text;
using (var connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Employee.accdb"))
using (var command = connection.CreateCommand())
{
command.CommandText = "select *from Employee where [emp_ID]= " + id + " ";
command.Parameters.AddWithValue("Name", int.Parse(nametb.Text));
command.Parameters.AddWithValue("Surname", int.Parse(surnametb.Text));
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
nametb.Text = reader["Name"].ToString();
surnametb.Text = reader["Surname"].ToString();
}
}
}
解决方案
需要改变的东西:
String id = searchTB.Text;
成为string id = searchTB.Text;
"select *from
成为"select * from
"select *from Employee where [emp_ID]= " + id + " "
就像where emp_Name = @Name and emp_Surname = @Surname
你按名字和姓氏搜索一样。"Name", int.Parse(nametb.Text)
您不能将名称解析为整数- sql 语句应该足够安全以防止SQL 注入。
- 如果 camelCase 变量可以更好地命名(阅读有关 camelCase 和 PascalCase 命名的信息)
最后,使用同一个按钮搜索和编辑是错误的(阅读SOLID的SRP原理)
所以,最初,你需要类似下面的代码(我没有测试它,因为我没有访问但看起来不错)。
请注意,我不了解您的数据库,因此您应该输入正确的字段名称
对于查询端:
private void button1_Click(object sender, EventArgs e)
{
// Search Button -- Query
string name = nameTb.Text;
string surName = surNameTb.Text;
var connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Employee.accdb");
var query = new OleDbCommand("select emp_ID, emp_Name, emp_Surname from Employee where emp_Name = @Name, emp_Surname = @Surname", connection);
query.Parameters.AddWithValue("@Name", name);
query.Parameters.AddWithValue("@Surname", surName);
connection.Open();
OleDbDataReader reader = query.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
idTb.Text = reader["emp_ID"].ToString(); //<<=== this is the primary key that never updated
nameTb.Text = reader["emp_Name"];
surNameTb.Text = reader["emp_Surname"];
}
}
connection.Close();
reader.Close();
query.Dispose();
}
对于更新命令端(另一个按钮):
private void button2_Click(object sender, EventArgs e)
{
// Update Button -- Command
string id = idTb.Text;
string name = nameTb.Text;
string surName = surNameTb.Text;
var connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Employee.accdb");
OleDbCommand command = new OleDbCommand("update Employee set emp_Name = @Name, emp_Surname = @Surname where emp_ID = @Id", connection);
command.Parameters.AddWithValue("@Id", id);
command.Parameters.AddWithValue("@Name", name);
command.Parameters.AddWithValue("@Surname", surName);
command.ExecuteNonQuery();
connection.Close();
command.Dispose();
}
在你学习的同时,有一个好的开始:)
推荐阅读
- javascript - 订单重复数据删除跟踪代码 woocommerce
- javascript - 循环遍历对象数组并更改值
- html - 简单的
不工作。IDE或浏览器没有错误 - xslt - 节点内提供了 xslt 中的应用模板
- c# - 使用左连接转换 LINQ 内连接
- sql-server - Tomcat 连接到 SQL 服务器
- xamarin.forms - 具有多个包含不相关内容的详细信息页面的主/详细信息
- javascript - Photoshop CC Javascript - 翻转图层/图像
- sql - SQL 不能使用从 group by 中的子查询返回的列
- java - java - 如何将文件从远程主机传递到另一个远程主机?