如何读取以前的c#记录应用程序?如何解决DBNull错误

本文关键字:何解决 DBNull 错误 应用程序 解决 读取 何读取 记录 | 更新日期: 2023-09-27 17:50:24

我需要帮助。我试图通过表中的记录来解决一个方程,所以我不知道如何使用表中每一行的值。

表图片:https://i.stack.imgur.com/fZuVb.jpg

所以我需要计算avg,当项目是y时,(balance =前余额- y的数量),(price = X的平均值,avg = X的平均)。

当项目为X时,(balance =前一个余额+数量),(Avg =(前一个余额*前一个Avg) +(价格*数量)/balance。

                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    //row[6]=qty
                    //row[7]=price
                    //row[8]=balance
                    //row[9]=avg
                    int ybalance = Convert.ToInt32(row[8]) - Convert.ToInt32(row[6]);
                    int xbalance = Convert.ToInt32(row[8]) + Convert.ToInt32(row[6]);
                    double TotalCost = Convert.ToInt16(row[6]) * Convert.ToDouble(row[7]);
                    double avgcost = Convert.ToDouble(row[9]);
                    double avg = ((ybalance * avgcost) + TotalCost) / xbalance;
                    if (Convert.ToInt32(row[7]) == null)
                    {
                        row[8] = ybalance;
                        row[7] = Convert.ToDouble(row[9]);
                        row[9] = Convert.ToDouble(row[9]);

                    }
                    else
                    {
                        row[8] = xbalance;
                        row[9] = avg;

                    }

'有什么提示或建议吗?

谢谢:)

如何读取以前的c#记录应用程序?如何解决DBNull错误

在强制转换前检查DBNull.Value(表示数据库中不存在的值):

if( row[8] != DBNull.Value && row[6] != DBNull.Value )
     int ybalance = Convert.ToInt32(row[8]) - Convert.ToInt32(row[6]);

要了解null和DBNull之间的区别,请阅读

您需要使用int.TryParse()。如果值为DBNull.Value,则返回默认整数值0。

试试这个:

int row6;
int rows8;
int.TryParse(row[6],out row6);
int.TryParse(row[8],out row8);
int ybalance = row8 - row6;
int xbalance = row8 + row6;