我是一名初学程序员(高中生),我的老师给了我一个任务,即每次在我的数据库中插入新行时,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();
}
当我运行它时,我的程序没有崩溃,看起来它正在插入但表中没有任何内容出现。
答案 0 :(得分:1)
您当前的代码会使用INSERT INTO
文字覆盖SET IDENTITY
查询。只有1个CommandText属性。
在创建表格时进行列自动增量,在插入过程中不应该做任何事情。
如果您使用设计器创建表,请返回并将Key列的IDENTITY
属性设置为true。
答案 1 :(得分:0)
就像Henk所说,对于给定的SQLCECommand,你不能有两个不同的CommandTexts。 只要您在构建表时将字段/列标识为标识,那么您需要确保在命令本身内取出对标识列的任何引用(您的是@Occupational_ID)。
然而,有两个非常重要的事实以前没有说过:
您需要两个单独的SQLCEComommands(一个用于打开Identity,另一个用于实际插入)。在“使用”声明中添加以下内容:
SqlCeCommand identChangeCommand = new SqlCeCommand(con); identChangeCommand.CommandText =“SET IDENTITY_INSERT职业开启”;
您需要在Insert中添加标识列的起始值。因为您使用整数作为数据类型,所以您可以选择任何整数值来开始。之后的每个Insert都会将一个值添加到上一个值Inserted:
使用(SqlCeCommand com = new SqlCeCommand(“INSERT INTO Occupational VALUES(1000,@employedBeforeBool,...
PS确保你的ExecuteNonQuery()这两个命令。 希望有所帮助!