简单的更新查询不起作用,但当我把它放入数据库本身它确实有效

时间:2017-11-01 08:55:13

标签: c# sql ms-access

当我在调试器中运行我的代码并将鼠标悬停在参数上时,它们确实具有正确的值。它只是不更新​​我的数据库,但当我复制查询并将其放入数据库时​​,它没有问题。

参数值为:

id = 7
omschrijving = douche muntjes
prijs = 0,5
catagorie = faciliteiten

我使用插入查询检查了连接,并确实将记录添加到我的数据库中。并且在数据库中有一个值为7的id。

当我通过我的C#代码运行插入查询或删除查询时,它确实有效,它只是不起作用的更新语句。如果有人看到这个问题,请帮助我。

public static void wijzigprijs(int id, string omschrijving, decimal prijs, string catagorie)
    {
        try
        {
            try
            {
                OleDbConnection verbinding = new OleDbConnection(
                @"Provider=Microsoft.ACE.OLEDB.12.0;
            Data Source=..\..\..\La_Rustique.accdb;
            Persist Security Info=False;");
                verbinding.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            OleDbCommand query = new OleDbCommand();
            query.CommandText = @"UPDATE prijslijst
                                SET omschrijving = @omschrijving, 
                                    prijs = @prijs, 
                                    catagorie = @catagorie
                                WHERE id = @id";

            query.Parameters.Add(new OleDbParameter("@id", OleDbType.Integer));
            query.Parameters["@id"].Value = id;
            query.Parameters.Add(new OleDbParameter("@omschrijving", OleDbType.VarChar));
            query.Parameters["@omschrijving"].Value = omschrijving;
            query.Parameters.Add(new OleDbParameter("@prijs", OleDbType.Decimal));
            query.Parameters["@prijs"].Value = prijs;
            query.Parameters.Add(new OleDbParameter("@catagorie", OleDbType.VarChar));
            query.Parameters["@catagorie"].Value = catagorie;

            query.Connection = verbinding;
            query.ExecuteNonQuery();
            MessageBox.Show("succesvol gewijzigd");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            verbinding.Close();
        }

    }

2 个答案:

答案 0 :(得分:1)

编辑更新

看看这个主题。在这里,他解释了如何在OleDbCommand

中使用变量

Variables with OleDbCommand

使用SQLCommand参数时,通常会这样做: 我知道这并没有完全回答你的问题,但是当我使用SQLCommand时,每当我想更新或插入变量时我都会使用这段代码:

<hr />

所以你应该能够做同样的事情。希望这会对你有所帮助。

答案 1 :(得分:1)

我从未见过用上述语法编写的OleDB查询。 换句话说:OleDB根本不使用命名参数,它只使用位置。

尝试像这样更改SQL语句:

{{1}}

然后在代码中按上面的顺序添加参数 低于那个。