将sqlce表中的标识设置为自动递增?

时间:2012-11-07 16:03:22

标签: c# sql-server-ce

我是一名初学程序员(高中生),我的老师给了我一个任务,即每次在我的数据库中插入新行时,sqlce表中的主键都会自动递增(我不要我想他也知道如何做到这一点:)

这是我的当前代码:

using (SqlCeConnection con = new SqlCeConnection(conString))
{
    con.Open();

    using (SqlCeCommand com = new SqlCeCommand("INSERT INTO Occupational VALUES(@employedBeforeBool, @nameofEmployer, @Addressemployed,@specificsAtEmployer,@employmentOnDischarge, @yearsExperienceWithEmployer, @desireToReturnToEmployer, @farmingExperienceBool, @tradesorapprentiship, @whattradesorapprentiship, @SoldierID, @Occupational_ID)", con))
    {
        com.CommandText = "SET IDENTITY_INSERT Occupational ON";
        com.Parameters.AddWithValue("@employedBeforeBool", Soldier1.employedBeforeBool);
        com.Parameters.AddWithValue("@nameofEmployer", Soldier1.nameOfEmployer);
        com.Parameters.AddWithValue("@Addressemployed", Soldier1.addressOfEmployer);
        com.Parameters.AddWithValue("@specificsAtEmployer", Soldier1.specificsAtEmployer);
        com.Parameters.AddWithValue("@employmentOnDischarge", Soldier1.employmentOnDischarge);
        com.Parameters.AddWithValue("@yearsExperienceWithEmployer", Soldier1.yearsExperienceWithEmployer);
        com.Parameters.AddWithValue("@desireToReturnToEmployer", Soldier1.desireToReturnToEmployer);
        com.Parameters.AddWithValue("@farmingExperienceBool", Soldier1.farmingExperienceBool);
        com.Parameters.AddWithValue("@tradesorapprentiship", Soldier1.tradeOrApprenticeship);
        com.Parameters.AddWithValue("@whattradesorapprentiship", Soldier1.whattradesorapprentiship);
        com.Parameters.AddWithValue("@SoldierID", SoldierID);
        //com.Parameters.AddWithValue("@Occupational_ID", counter);

        com.ExecuteNonQuery();
    }

当我运行它时,我的程序没有崩溃,看起来它正在插入但表中没有任何内容出现。

2 个答案:

答案 0 :(得分:1)

您当前的代码会使用INSERT INTO文字覆盖SET IDENTITY查询。只有1个CommandText属性。

在创建表格时进行列自动增量,在插入过程中不应该做任何事情。

如果您使用设计器创建表,请返回并将Key列的IDENTITY属性设置为true。

答案 1 :(得分:0)

就像Henk所说,对于给定的SQLCECommand,你不能有两个不同的CommandTexts。 只要您在构建表时将字段/列标识为标识,那么您需要确保在命令本身内取出对标识列的任何引用(您的是@Occupational_ID)。

然而,有两个非常重要的事实以前没有说过:

  1. 您需要两个单独的SQLCEComommands(一个用于打开Identity,另一个用于实际插入)。在“使用”声明中添加以下内容:

    SqlCeCommand identChangeCommand = new SqlCeCommand(con); identChangeCommand.CommandText =“SET IDENTITY_INSERT职业开启”;

  2. 您需要在Insert中添加标识列的起始值。因为您使用整数作为数据类型,所以您可以选择任何整数值来开始。之后的每个Insert都会将一个值添加到上一个值Inserted:

    使用(SqlCeCommand com = new SqlCeCommand(“INSERT INTO Occupational VALUES(1000,@employedBeforeBool,...

  3. PS确保你的ExecuteNonQuery()这两个命令。 希望有所帮助!