C# DataAdapter.Update()返回1而不更新数据库

C# DataAdapter.Update()返回1而不更新数据库,c#,sql-server-ce,dataadapter,database-update,C#,Sql Server Ce,Dataadapter,Database Update,很抱歉,如果之前已经回答过这个问题,但是我在任何地方都找不到解决方案。这很可能是显而易见的,但我现在被自己的代码蒙蔽了双眼 我正试图用一些文本框中的信息更新我的数据库。调试时,我可以看到DataTable行正在使用更改进行更新,dataadapter.update返回1。但当我检查我的数据库后,它没有变化。奇怪的是,它在我的第一次更新调用中起作用,但在另一次调用中却不起作用 使用后我正在关闭连接 我已经尝试了几种不同的方法来实现这一点,但无论我尝试了什么,我都无法让它发挥作用。我创造了尽可能平等

很抱歉,如果之前已经回答过这个问题,但是我在任何地方都找不到解决方案。这很可能是显而易见的,但我现在被自己的代码蒙蔽了双眼

我正试图用一些文本框中的信息更新我的数据库。调试时,我可以看到DataTable行正在使用更改进行更新,dataadapter.update返回1。但当我检查我的数据库后,它没有变化。奇怪的是,它在我的第一次更新调用中起作用,但在另一次调用中却不起作用

使用后我正在关闭连接

我已经尝试了几种不同的方法来实现这一点,但无论我尝试了什么,我都无法让它发挥作用。我创造了尽可能平等的(因为我是新手)一个工作,但仍然没有。我也尝试为更新创建自己的updatecommand

这是我的命令:

    private SqlCeCommand createCharInstanceCommand()
    {
        SqlCeCommand updateCommand = new SqlCeCommand();
        updateCommand.CommandText = "UPDATE [CharacterClassInstance] SET " +
            "[CharID] = @p1, [ClassID] = @p2, [Lvl] = @p3, [SpellsKnown0] = @p4, [SpellsKnown1] = @p5, [SpellsKnown2] = @p6, " +
            "[SpellsKnown3] = @p7, [SpellsKnown4] = @p8, [SpellsKnown5] = @p9, [SpellsKnown6] = @p10, [SpellsKnown7] = @p11, " +
            "[SpellsKnown8] = @p12, [SpellsKnown9] = @p13, [SpellsPrDay0] = @p14, [SpellsPrDay1] = @p15, [SpellsPrDay2] = @p16, " +
            "[SpellsPrDay3] = @p17, [SpellsPrDay4] = @p18, [SpellsPrDay5] = @p19, [SpellsPrDay6] = @p20, [SpellsPrDay7] = @p21, " +
            "[SpellsPrDay8] = @p22, [SpellsPrDay9] = @p23, [SpellSaveDC0] = @p24, [SpellSaveDC1] = @p25, [SpellSaveDC2] = @p26, " +
            "[SpellSaveDC3] = @p27, [SpellSaveDC4] = @p28, [SpellSaveDC5] = @p29, [SpellSaveDC6] = @p30, [SpellSaveDC7] = @p31, " +
            "[SpellSaveDC8] = @p32, [SpellSaveDC9] = @p33, [BonusSpell1] = @p34, [BonusSpell2] = @p35, [BonusSpell3] = @p36, " +
            "[BonusSpell4] = @p37, [BonusSpell5] = @p38, [BonusSpell6] = @p39, [BonusSpell7] = @p40, [BonusSpell8] = @p41, [BonusSpell9] = @p42 " +
            "WHERE ([ClassInstanceID] = @p43)";

        for (int i = 1; i <=43;i++)
        {
            if (i == 43) updateCommand.Parameters.AddWithValue("@p43", chosenClassInstance);
            else updateCommand.Parameters.AddWithValue("@p" + i, dClassInstance.Rows[chosenClassInstance - 1].ItemArray.GetValue(i).ToString());
        }
        return updateCommand;
    }
出于某种原因,它与另一个数据适配器上的标准生成命令配合使用


任何帮助都将不胜感激。

我终于明白了我的代码不起作用的原因。 问题在于UpdateCommand的构建,或者更确切地说是参数的分配。在我有限的知识范围内,我盲目地遵循一个示例,直到我自己为另一个字段集合编写了一个更新,我才发现错误

发生的情况是,参数得到了旧值,因为它们是在我构建DataAdapter时添加的,而不是在更新完成后添加的。我怀疑有比addWithValue()更好的方法来分配变量,但至少现在它可以工作;) 生活和学习有人说:)

为了解决我的问题,我移动了这个代码

classDataAdapter.UpdateCommand = createCharInstanceCommand();
进入我实际运行更新的部分:

        private void updateClassInstance()
    {
        DataRow row = dClassInstance.Rows[chosenClassInstance - 1];

        for (int i = 4; i <= 42; i++)
        {
            if (i <= 23) row[i] = Convert.ToInt32(spellInfoBoxes[i - 4].Text);
            if (i >= 34) row[i] = Convert.ToInt32(spellInfoBoxes[i - 14].Text);
        }
        try
        {
            dClassInstance.Rows[chosenClassInstance - 1].AcceptChanges();
            dClassInstance.Rows[chosenClassInstance - 1].SetModified();
        }
        catch { }

        classDataAdapter.UpdateCommand = createCharInstanceCommand();
        classDataAdapter.UpdateCommand.Connection = classConnection;

        int spellinfotest = this.classDataAdapter.Update(dClassInstance);
        this.classConnection.Close();
    }
private void updateClassInstance()
{
DataRow row=dClassInstance.Rows[chosenClassInstance-1];

对于(inti=4;i,我终于明白了我的代码不起作用的原因。 问题在于UpdateCommand的构建,或者更确切地说是参数的分配。在我有限的知识范围内,我盲目地遵循了一个示例,直到我自己为另一个字段集合编写了更新之后,才发现错误

发生的情况是,参数得到了旧值,因为它们是在我构建DataAdapter时添加的,而不是在更新完成后添加的。我怀疑有比addWithValue()更好的方法来分配变量,但至少现在可以工作;) 生活和学习有人说:)

为了解决我的问题,我移动了这个代码

classDataAdapter.UpdateCommand = createCharInstanceCommand();
进入我实际运行更新的部分:

        private void updateClassInstance()
    {
        DataRow row = dClassInstance.Rows[chosenClassInstance - 1];

        for (int i = 4; i <= 42; i++)
        {
            if (i <= 23) row[i] = Convert.ToInt32(spellInfoBoxes[i - 4].Text);
            if (i >= 34) row[i] = Convert.ToInt32(spellInfoBoxes[i - 14].Text);
        }
        try
        {
            dClassInstance.Rows[chosenClassInstance - 1].AcceptChanges();
            dClassInstance.Rows[chosenClassInstance - 1].SetModified();
        }
        catch { }

        classDataAdapter.UpdateCommand = createCharInstanceCommand();
        classDataAdapter.UpdateCommand.Connection = classConnection;

        int spellinfotest = this.classDataAdapter.Update(dClassInstance);
        this.classConnection.Close();
    }
private void updateClassInstance()
{
DataRow row=dClassInstance.Rows[chosenClassInstance-1];
对于(int i=4;i