4

我是一名初级程序员(高中生),我的老师给了我一项任务,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();
    }

我的程序在运行时没有崩溃,看起来它正在插入,但表格内没有显示任何内容。

4

2 回答 2

1

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

并在创建表时完成列自动增量,在插入期间您不必做任何事情。

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

于 2012-11-07T16:09:20.313 回答
0

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

但是,有两个非常重要的事实之前没有说明:

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

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

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

    使用 (SqlCeCommand com = new SqlCeCommand("INSERT INTO Occupational VALUES(1000, @usedBeforeBool, ...

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

于 2012-11-17T23:15:40.857 回答