【问题标题】:simple update query doesn't work, but when i put it into database itself it does work简单的更新查询不起作用,但是当我将它放入数据库本身时它确实起作用
【发布时间】:2017-11-01 08:55:13
【问题描述】:

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

参数值为:

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();
        }

    }

【问题讨论】:

  • 参数值是什么?
  • id = 7, omschrijving = douche muntjes, prijs = 0,5, catagorie = faciliteiten
  • 定义您的命令类型 query.CommandType = CommandType.Text 并尝试在单行中编写您的查询query.CommandText = @"UPDATE prijslijst SET omschrijving = @omschrijving, prijs = @prijs, catagorie = @catagorie WHERE id = @id";
  • @JelleTaal 你说的异常是什么?
  • OleDb 提供程序可能需要按照它们在查询中出现的相同顺序添加参数,这与 MSSQL 提供程序不同,它按名称而不是位置分配。

标签: c# sql ms-access


【解决方案1】:

编辑更新

看看这个话题。在这里,他解释了如何使用 OleDbCommand 使用变量

Variables with OleDbCommand

这是您在使用 SQLCommand 参数时通常会执行的操作: 我知道这并不能完全回答您的问题,但是当我使用 SQLCommand 时,只要我想使用变量更新或插入,我就会使用此代码:

   string query = @"UPDATE prijslijst
                            SET omschrijving = @omschrijving, 
                                prijs = @prijs, 
                                catagorie = @catagorie
                            WHERE id = @id";

                        SqlCommand cmd = new SqlCommand(query, connDatabase);

                        cmd.Parameters.Add("@id", SqlDbType.integer).Value = 7; 
                        cmd.ExecuteNonQuery();
                        connDatabase.Close();

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

【讨论】:

    【解决方案2】:

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

    尝试像这样更改您的 SQL 语句:

    query.CommandText = @"UPDATE prijslijst
                                SET omschrijving = ?, 
                                    prijs = ?, 
                                    catagorie = ?
                                WHERE id = ?";
    

    然后在代码中按上述顺序添加参数 低于此。

    【讨论】:

    • 好吧,这个措辞不是很好。 OleDb 不理解命名参数 - 请参阅 this post
    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 2023-02-07
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多