c# - 尝试更新表时无法写入 CLR 类型 C# 错误
问题描述
我有一个包含多个DataGridView
组件的项目。数据库中的数据表包含这些表中的一些外键,因此我需要将它们交换为相应的值(例如,faculty_id 到 Faculty_title)。
所以我DataGridViewComboBoxColumn
为那些做了一个。我在几个表中有faculty_id 外键,并且DataGridViewComboBoxColumn
它们的字面意思是相同的,但似乎它只在其中一个表上工作正常。
代码之一DataGridViewComboBoxColumn
:
DataGridViewComboBoxColumn students_faculty_cbc = new DataGridViewComboBoxColumn()
{
HeaderText = "Fakultate",
DataSource = attendanceRecording.Tables["faculties"],
DisplayMember = "faculty_title",
ValueMember = "faculty_id",
DataPropertyName = "faculty_id"
};
所以现在,当我将此列添加到 时DataGridView
,我在每一行中都有一个带有下拉列表的列,可能的值是 Faculty_title。
当我更改它并尝试与数据库同步更改时,出现错误:
System.InvalidCastException: 'Can't write CLR type System.String with handler type Int32Handler'
该查询也与表中的查询非常相似,它DataGridViewComboBoxColumn
工作得很好。没有额外添加或没有任何遗漏。因此,例如:
- 查询,我没有得到任何错误:
NpgsqlCommand update_audiences = new NpgsqlCommand("UPDATE audiences SET audience_number = @audience_number, faculty_id = @faculty_id WHERE audience_id = @id", conn);
update_audiences.Parameters.Add(new NpgsqlParameter("@audience_number", NpgsqlTypes.NpgsqlDbType.Varchar, 5, "audience_number"));
update_audiences.Parameters.Add(new NpgsqlParameter("@faculty_id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "faculty_id"));
update_audiences.Parameters.Add(new NpgsqlParameter("@id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "audience_id"));
- 查询,这给了我错误:
NpgsqlCommand update_students = new NpgsqlCommand("UPDATE students SET " +
"student_name = @student_name, student_surname = @student_surname, matriculation_number = @matriculation_number, faculty_id = @faculty_id, " +
"course = @course, phone_number = @phone_number, email = @email, gender = @gender WHERE student_id = @id", conn);
update_students.Parameters.Add(new NpgsqlParameter("@student_name", NpgsqlTypes.NpgsqlDbType.Varchar, 50, "student_name"));
update_students.Parameters.Add(new NpgsqlParameter("@student_surname", NpgsqlTypes.NpgsqlDbType.Varchar, 60, "student_surname"));
update_students.Parameters.Add(new NpgsqlParameter("@matriculation_number", NpgsqlTypes.NpgsqlDbType.Varchar, 7, "matriculation_number"));
update_students.Parameters.Add(new NpgsqlParameter("@faculty_id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "faculty_id"));
update_students.Parameters.Add(new NpgsqlParameter("@course", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "course"));
update_students.Parameters.Add(new NpgsqlParameter("@phone_number", NpgsqlTypes.NpgsqlDbType.Integer, 8, "phone_number"));
update_students.Parameters.Add(new NpgsqlParameter("@email", NpgsqlTypes.NpgsqlDbType.Varchar, 50, "email"));
update_students.Parameters.Add(new NpgsqlParameter("@gender", NpgsqlTypes.NpgsqlDbType.Varchar, 15, "gender"));
update_students.Parameters.Add(new NpgsqlParameter("@id", NpgsqlTypes.NpgsqlDbType.Integer, sizeof(int), "student_id"));
我无法在这里发现问题。也许有人可以告诉我,我做错了什么?
解决方案
推荐阅读
- c - 如何在数组中存储 1 000 000 000 个项目?
- amazon-web-services - 如何从 VPN 访问 AWS ElastiCache (Redis)
- ios - 如何在先前转换的 UIView 上正确地为转换设置动画
- database - 如何删除最后少于500的大文本文件中的行
- dart - 是否可以使 Flutter 中的字符具有相同的宽度?
- python - 熊猫:如何计算日期之前所有出现的id
- ios - UIButtons 没有出现在 UIScrollView 中
- kubernetes - 可以同时拥有 l4 和 l7 ingress-nginx 吗?
- c++ - 有什么方法可以使虚拟 C++ 方法在视觉上与 Visual Studio 中的非虚拟方法不同?
- javascript - 如何从 Cloud Functions HTML 文件访问本地 JavaScript 文件?