将数据插入数据库时​​出错

时间:2013-09-26 19:21:07

标签: c# database insert

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

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

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

我如何纠正这个?

2 个答案:

答案 0 :(得分:4)

错误表示您的字符串长于列允许的最大长度。您需要调整架构以允许更长的值或截断您插入的值。

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

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

阅读Sql Injection攻击。

更新:正如其他人所说,您应该考虑将名称存储在不同的列中(例如FirstNameMiddleNameLastName。否则您会丢弃信息这将很难重新计算(例如,尝试使用您的架构对最常见的中间名进行统计)。

答案 1 :(得分:0)

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

无论其

我已经在数据库工作了很长一段时间了,我想建议你不要把这个名字全部保存在一栏中。我一遍又一遍地看到这个。这在当时似乎是一个好的,快速的想法,但迟早,您将需要获得名称的一部分。一旦你达到这一点,你会发现自己遇到各种各样的问题,因为名字是非常非常复杂的东西,高度依赖于语言和文化。给出一个完整名称列表,考虑如何解析姓氏。起初,看起来很简单,直到你考虑所有特殊情况,比如有两个姓氏的人(“哈珀史密斯”),其他文化的姓氏(“圣詹姆斯”,“奥康奈尔”,“凡der Wall“)等。

考虑将名称分为三列中的三个部分,它不需要太多,以后会为您节省很多麻烦。