0

我有 3 个名为 、TxtFirstNameTxtMiddleName的文本框TxtLastName。我想将此信息插入到我的列名只是 FullName 的数据库中。我希望我的 3 个信息加入以将它们插入一个。我所做的是:

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

但它似乎让我犯了一个错误。“字符串或二进制数据将被截断。语句已终止。”

我该如何纠正这个?

4

2 回答 2

4

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

另外:您应该真正使用参数化命令:

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

阅读 Sql 注入攻击。

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

于 2013-09-26T19:27:00.710 回答
0

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

然而

我已经使用数据库很长一段时间了,我想建议您不要将名称全部存储在一个列中。我一遍又一遍地看到这一点。这在当时似乎是一个好的、快速的想法,但迟早,您将需要获得名称的一部分。一旦你到了那个地步,你就会发现自己遇到了各种各样的问题,因为名字是非常非常复杂的东西,高度依赖于语言和文化。给定一个全名列表,考虑如何仅解析姓氏。起初,这似乎很简单,直到您考虑所有特殊情况,例如有两个姓氏的人(“Harper-Smith”),来自其他文化的姓氏(“St. James”、“O'Connell”、“Van墙”)等。

就考虑把名字分三栏分三栏存起来,花不了多少,以后省去不少麻烦。

于 2013-09-26T19:44:00.330 回答