【问题标题】:Variable holding a sql money data type doesn't update (C#)持有 sql money 数据类型的变量不会更新(C#)
【发布时间】:2012-06-19 02:34:09
【问题描述】:

我的 sql server 数据库中有一个字段类型 money,它是 moneyAcumulated。然后使用command 对象,我执行一个存储过程——除其他外——带来moneyAcumulated 列的值。然后在 while 循环中,我将存储过程返回的每一列的所有值存储在变量中。

SqlCommand command = new SqlCommand("getTickets", Connection.getConnection());
            command.CommandType = CommandType.StoredProcedure;

            SqlDataReader reader = command.ExecuteReader();

            string bet = "";
            decimal moneyAcumulated = 0.0M;
            string id= "";
            string name = "";
            int cod = -1;
            decimal prize = 0.0M;
            while (reader.Read())
            {
                bet = reader.GetString(0);
                moneyAcumulated = reader.GetDecimal(1); // This variable doesn't chage its value
                name = reader.GetString(2);
                id = reader.GetString(3);
                cod = reader.GetInt32(4);
            }

第一次while循环迭代每个变量取正确的值(包括moneyAcumulated带来reader,但第二次moneyAcumulated没有改变它的值而其他人这样做,为什么?

【问题讨论】:

  • 您在 Management Studio 中查看过结果集吗?所有行的值可能都相同。此外,您将所有行中的值存储在相同的变量中。您可能希望使用列表或类似的东西来保存每一行。
  • 是的,当我在调试时,我在每次迭代中都做了一个查询 (select * from Money),以查看列 moneyAcumulated 的值,它在数据库中发生了变化,但在程序中没有变化。

标签: c# sqldatareader sqldatatypes type-equivalence


【解决方案1】:

问题是SqlDataReader将command.ExecuteReader返回的所有数据加载到内存中,那么如果数据库中的数据发生变化,它们在内存中不会改变,我以为每次程序执行@时它们都会改变987654322@ 方法,这就是为什么它不起作用。由于数据库中的 moneyAcumulated 字段对于所有让我更加困惑的元组最初都是相同的,因为其他的都在变化,而 moneyAcumulated 没有变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多