2011-06-06 81 views
0
string insertCommand = 
    "INSERT INTO Users (UserID) VALUES" + "" + "(CONVERT(uniqueidentifier, '" + 
    UsersIdentityToinsert + "'),'"+ userName+",0,null')"; 

它告诉我:问题的SQL语句

There are fewer columns in the INSERT statement than values specified 
在VALUES子句中

。 VALUES子句中的 值的数量必须与 INSERT语句中指定的列数相匹配 。

但我有四列?

回答

2

你只需要用户名中插入列表中,但在值列表中,你有两个值 - 唯一标识符和用户名

这将更好的工作:(假设您的用户名列名)

string insertCommand = 
    "INSERT INTO Users (UserID, username) VALUES" + "" + 
    "(CONVERT(uniqueidentifier, '" + UsersIdentityToinsert + "'),'"+ userName+"')"; 

编辑:

我觉得我需要更多一点清楚地解决这个问题的一部分:

乙我有四列吗?

您收到的错误是指在INSERT语句中指定的列数 - 而不是实际的表,所以如果你开始将插入件与:

INSERT INTO AnyTable (ColumnA, ColumnB) 

您需要在此匹配列数在您的VALUES子句中

VALUES ("Value1", "Value2") 
+2

如果我们使用参数,它会工作得更好,所以我们可以防范sql注入和丑陋的代码。 :) – 2011-06-06 06:03:56

+0

嗯。你是否说我需要声明@Username,UniqueIdentifier ..然后将它们设置为值....会阻止sql的攻击? – WithFlyingColors 2011-06-06 06:11:30

+0

sql注入是一个有效的点,但不仅仅是声明它们 - 你应该验证你所得到的任何值 – Beno 2011-06-06 06:13:27

0

您在列名称中缺少“UserName”,即列名和值mismathch。

string insertCommand = 
    "INSERT INTO Users (UserID,UserName) VALUES" + "" + 
    "(CONVERT(uniqueidentifier, '" + UsersIdentityToinsert + "'),'"+ userName+"')";