SQL主/身份密钥不是自动增量

时间:2018-01-21 23:01:45

标签: sql sql-server vb.net

当我在代码中传递空值时,我很困惑为什么SQL不会自动递增我的Id列:

case GameStatus.WIN:
                gamefeed.Items.Add(String.Format("Congragulations, you rolled {0}. YOU WIN.", Sum));

                connect.Open();
                SqlCommand cmdwin = connect.CreateCommand();
                cmdwin.CommandType = CommandType.Text;
                cmdwin.CommandText = "insert into Round values('','" + textBox2.Text + "', '" + numRolls.ToString() + "', '"+ Point.ToString()+"', 'Win')";
                cmdwin.ExecuteNonQuery();
                connect.Close();

                break;

对正确方向的任何帮助或推动表示赞赏!

2 个答案:

答案 0 :(得分:2)

如果您已将Id列定义为Identity列,则无需为INSERT语句中的Id列传递任何内容(甚至不是占位符)。< / p>

cmdwin.CommandText = 
    "insert into Round values('" + textBox2.Text + "', '" + numRolls.ToString() + "', '"+ Point.ToString()+"', 'Win')";

另外,请注意连接文本值(SQL注入)是一个非常糟糕的主意,而是使用参数。

答案 1 :(得分:1)

正如已经说过的那样,你不需要将paas值赋予身份字段(自动增量)

你的SQL应该是

Column name or number does not match table definition

如果您收到错误

—Column1 is Identity
"insert into Round(Column2, Column3, Column4, Column5) values('" + textBox2.Text + "', '" + numRolls.ToString() + "', '"+ Point.ToString()+"', 'Win')";
/*Replace Column,2,3,4,5 with your respective columns in table Round*/

然后你要么在insert中传递更多值,要么在表Round中传递你的列。 要么 您应该尝试在插入查询中提供列的名称

class Zones{
private int id;
private String name;

public Zones(int id, String name){
this.id=id;
this.name=name;
}

public int getId(){
return id;
}

public String getName(){
return name;
}

@Override
public String toString(){
return id+" - "+name;
}
相关问题