峰峦@叠嶂 2024-06-27 13:41 采纳率: 99.5%
浏览 1
已结题

将去年同月的数据取到,并填写到对应的数据表字段内

以下,目标是,若相同产品今年出成率,与去年同月的进行比较,若去年同月的没有,则从去年12月里面取,若还没有,则为空,以下方法是为了取12月的出成率数据,循环是为了将取得的数据,填入到数据表的对应字段并显示出来,但在实际运行中,取不到去年12月的数据,请给分析指导一下,哪里有问题呢,谢谢


private decimal GetRate(string proName) //此方法,是用来获得12月份产品的出成率;
{
    string Conn = "server=192.168.100.247;database=WHMesInfo;user=sa;password=whyy@2021";

    decimal DeceRate = 0;

    string sqlstring = @"select rate from w_YirateMom where proName = @proName and dateInfo = '2023年12月'";

    using (SqlConnection Connect = new SqlConnection(Conn))
    using (SqlCommand Cmd = new SqlCommand(sqlstring, Connect))
    {
        Cmd.Parameters.AddWithValue("@proName", proName);

        try
        {
            Connect.Open();

            object result = Cmd.ExecuteScalar();

            if (result != null && result != DBNull.Value)
            {
                DeceRate = Convert.ToDecimal(result);
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show("Error retrieving rate: " + ex.Message);
        }

    }

    return DeceRate;
}

省略查询SQL的代码
 foreach (DataRow row in dt.Rows)
 {
     decimal Lastrate = row["rate"] != DBNull.Value ? Convert.ToDecimal(row["rate"]) : 0;

     if ((Lastrate == null) || (Lastrate == 0))
     {
         string proName = Convert.ToString(row["proName"]);

         decimal lastDecerate = GetRate(proName);

         if (lastDecerate != 0)
         {
             Lastrate = lastDecerate;
         }

     }
 }
  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-27 13:41
    关注

    引自免费微信小程序:皆我百晓生

    根据你提供的代码和描述,我注意到一些可能的问题和可以改进的地方。下面是一些分析指导:

    1. 查询去年同月的数据: 你的代码查询的是固定日期的数据('2023年12月'),而你需要查询的是去年的数据。可以使用 DateTime 类来获取去年的日期。比如当前年份减一加上前一个月即可获取去年的同月份数据。假设你想获取去年的相同月份的数据,可以这样写:
    DateTime currentDate = DateTime.Now; // 获取当前日期时间
    int lastYear = currentDate.Year - 1; // 获取去年的年份
    string yearOfLastYear = lastYear.ToString(); // 确保使用字符串类型
    string sqlstring = @"select rate from w_YirateMom where proName = @proName and dateInfo = '" + yearOfLastYear + "-12月'"; // 构建查询语句,查询去年的数据
    

    这样你可以动态地获取当前日期的上一年,然后查询上一年同一月份的数据。如果没有匹配项,将会得到默认的 null 值。这样就可以实现去年的同月数据查找。如果你的需求有所不同,请相应地调整代码。

    1. 异常处理: 你的代码中有一个异常处理块,如果发生异常则会弹出一个消息框。虽然这是可以的,但为了更好地维护程序的稳定性和可调试性,你可以考虑记录错误日志或输出异常信息到控制台或文件。这样你可以更容易地追踪和解决潜在的问题。
    2. 数据转换和验证: 在检查 result 是否为 nullDBNull.Value 之前,你确保正确地返回了数据行并检查到了列中的数据值 row["rate"] 是否可能为 null 或其他不正确的数据类型。这样可以确保转换是安全的。在你的情况下,因为出成率 rate 是一个数值字段,所以你可能不需要检查是否为 null(因为你已经知道这是数值字段),而是需要确保转换是正确的数值类型。如果转换失败,你可以捕获异常并处理它。

    结合上述修改点,请确保检查这些方面的改进是否符合你的需求。另外,注意在处理数据库连接和操作时遵循最佳实践(例如使用 using 块管理连接),以避免潜在的资源泄漏和其他问题。希望这些建议能帮助你解决问题!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月5日
  • 已采纳回答 6月27日
  • 创建了问题 6月27日

悬赏问题

  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令