将数据插入数据库时出错

本文关键字:出错 数据库 插入 数据 | 更新日期: 2023-09-27 18:33:07

我有 3 个文本框,分别称为 TxtFirstNameTxtMiddleNameTxtLastName 。我想将此信息插入到我的列名只是全名的数据库中。我希望我的 3 个信息加入以将它们插入一个。我所做的是:

string _fullname = _lastname + "," + _firstname + middlename;
cmd = new SqlCommand("INSERT INTO TableVote (FullName) VALUES ('" + _fullname + "')", sc);

但似乎它给我带来了错误。"字符串或二进制数据将被截断。该声明已终止。

我该如何纠正?

将数据插入数据库时出错

该错误意味着字符串的长度超过了列允许的最大长度。您需要调整架构以允许更长的值,或者截断插入的值。

另外:你真的应该使用参数化的命令:

cmd = new SqlCommand("INSERT INTO TableVote (FullName) VALUES (@fullname)");
cmd.Parameters.AddWithValue("@fullname", _fullname);

阅读 SQL 注入攻击。

更新:正如其他人提到的,您应该考虑将名称存储在不同的列中(即 FirstNameMiddleNameLastName。否则,您将丢弃难以重新计算的信息(例如,尝试使用您的模式对最常见的中间名进行统计(。

如前所述,插入到表中的值对于列规范来说太长了。

然而

我已经使用数据库一段时间了,我想建议您不要将所有名称存储在一列中。我一遍又一遍地看到这一点。这在当时似乎是一个好主意,但迟早,你会有一个要求,你需要得到部分名称。一旦你达到这一点,你会发现自己会遇到各种各样的问题,因为名字是非常非常复杂的东西,高度依赖于语言和文化。给定一个全名列表,考虑如何解析出姓氏。起初,这似乎很简单,直到您考虑所有特殊情况,例如有两个姓氏的人("哈珀-史密斯"(,来自其他文化的姓氏("圣詹姆斯","奥康奈尔","范德沃尔"(等。

只需考虑将名称分成三列的三部分保存,它不需要太多,以后会为您省去很多麻烦。