将数据插入数据库时收到给定的错误。查询没问题。我不知道出了什么问题。
答案 0 :(得分:10)
这里有3件事。
在表名周围添加括号,因为它是关键字:
INSERT INTO [User]
在将来命名对象时尽量避免使用关键字。从长远来看,它可以省去很多麻烦!
<强> View reserved keywords here 强>
在您的值周围添加括号,因此您的查询格式为:
INSERT INTO [TableName] (ColumnA, ColumnB) VALUES (@ParamA, @ParamB)
最重要的是(因为它的1个错误,你不会被提示,但从长远来看会受到影响),参数化您的查询。这将避免 SQL Injection ,并且在编写任何SQL查询时应该是常见做法:
cmd.CommandText = "Insert into [User] (Name, Uid) values (@Name, @Uid)";
cmd.Parameters.Add("@Name", SqlDbType.Nvarchar).Value = tb1.Text;
cmd.Parameters.Add("@Uid", SqlDbType.Int).Value = tb1.Text;
答案 1 :(得分:4)
您遗失(
,)
,[
和]
:
Insert into [User] (Name, Uid) values ('"+tb1.Text+"', '"+tb1.Text+"')";
请注意在保留字User周围使用'['和']'。并且,像@marc_s一样:“一个人应该真正使用参数化查询以避免SQL Injection”
查看THIS了解详情。
答案 2 :(得分:3)
User
是一个关键字。您可以使用括号[]
围绕它们来使用保留关键字。并且您应该用括号()
括起值。
尝试以下方法:
str = "Insert into [User] (Name, Uid) values
('" + tb1.Text + "', '" + tb1.Text + "')";
或者,更具可读性:
str = String.Format("Insert into [User] (Name, Uid) values ('{0}', '{1}')",
tb1.Text, tb2.Text);
另外,正如jadarnel27所评论的那样,请考虑使用参数化SQL来阻止SQL injection attacs。
答案 3 :(得分:2)