You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#对接SQL Server开发租车计算器如何返回实际金额而非SQL字符串

修复方案

核心错误原因

  • 你没有实际执行SQL命令从数据库读取租金单价,直接把3条SQL查询字符串拼接后赋值给了显示控件,所以只会输出SQL语句文本
  • SQL语句语法错误,没有正确把C#中的天数、周数、月数变量传入查询逻辑
  • 租期计算逻辑存在笔误和逻辑漏洞:日租计算错误乘以了周数,按月/按周折算没有做取余处理,会导致租期计算错误
  • 直接拼接SQL语句存在SQL注入风险,需要用参数化查询

调整后可运行代码

private void button8_Click(object sender, EventArgs e)
{
    DateTime startdate = dateTimePicker1.Value.Date;
    DateTime enddate = dateTimePicker2.Value.Date;
    // 租期合法性校验
    if (enddate < startdate)
    {
        label12.Text = "结束日期不能早于开始日期";
        return;
    }
    int no_of_days = (enddate - startdate).Days;
    // 修正租期计算逻辑:先算整月、剩余算整周、最后剩余算天数
    int no_of_months = no_of_days / 30; // 可根据你的月定义调整,原逻辑no_of_weeks/4误差较大
    int remain_days_after_month = no_of_days % 30;
    int no_of_weeks = remain_days_after_month /7;
    int remain_days = remain_days_after_month %7;

    // 一次性查询三个单价,减少数据库请求
    string query = "SELECT daily_rent, weekly_rent, monthly_rent FROM Rent";
    decimal total = 0;

    try
    {
        con.Open();
        using(SqlCommand cmd = new SqlCommand(query, con))
        {
            using(SqlDataReader reader = cmd.ExecuteReader())
            {
                if(reader.Read())
                {
                    decimal dailyRent = Convert.ToDecimal(reader["daily_rent"]);
                    decimal weeklyRent = Convert.ToDecimal(reader["weekly_rent"]);
                    decimal monthlyRent = Convert.ToDecimal(reader["monthly_rent"]);
                    // 计算总价
                    total = monthlyRent * no_of_months + weeklyRent * no_of_weeks + dailyRent * remain_days;
                }
            }
        }
        label12.Text = total.ToString("C"); // 按货币格式输出
    }
    catch(Exception ex)
    {
        label12.Text = "计算失败:" + ex.Message;
    }
    finally
    {
        if(con.State == System.Data.ConnectionState.Open)
        {
            con.Close();
        }
    }
}

补充说明

  • 如果你的Rent表存储的是多车型的租金,需要在SQL语句中增加WHERE条件,传入当前选择的车型ID做筛选
  • 月租期计算如果需要按自然月而非30天折算,需要单独写日期计算逻辑替换当前的整数除法逻辑
  • 参数化查询可以有效避免SQL注入风险,禁止直接把用户输入的变量拼接到SQL语句中

内容的提问来源于stack exchange,提问作者user14699972

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:36:03