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

在C#中调用SQL标量函数usfMGAHolidayCalendar的实现求助

C#调用SQL标量函数完整实现

先修正现有代码的两个核心错误

  • 函数名不匹配:SQL中定义的标量函数为[dbo].[usfMGAHolidayCalendar],你现有代码中调用的usfGetMGAHolidayCalendar多了Get前缀,会触发找不到函数的报错
  • 命令对象实例化错误:你现有代码写的new SqlParameter是参数类的构造方法,应该改为new SqlCommand创建SQL命令对象

完整可运行代码

首先确认你已经引入了必要的命名空间:

using System;
using System.Data;
using System.Data.SqlClient;

Main方法完整实现:

static void Main(string[] args)
{
    // 替换为你实际的数据库连接字符串
    string connString = "Server=你的数据库地址;Database=你的库名;Integrated Security=True;";
    
    // 示例从命令行读取参数,输入格式为:程序名 MGAID 日期(如:xxx.exe 1 2024-10-01)
    if (args.Length < 2)
    {
        Console.WriteLine("参数不足,请按格式输入:程序名 MGAID 日期(示例:xxx.exe 1 2024-10-01)");
        return;
    }
    
    // 解析命令行参数
    if (!int.TryParse(args[0], out int mgaId) || !DateTime.TryParse(args[1], out DateTime maskDate))
    {
        Console.WriteLine("参数格式错误,MGAID为整数,日期格式为yyyy-MM-dd");
        return;
    }

    try
    {
        using (SqlConnection conn = new SqlConnection(connString))
        {
            // 修正函数名,和SQL定义保持一致
            string query = @"SELECT dbo.usfMGAHolidayCalendar(@MGAID, @MaskDate) As NewMaskDate;";
            SqlCommand cmd = new SqlCommand(query, conn);
            cmd.CommandType = CommandType.Text;
            
            // 给参数赋值
            cmd.Parameters.Add("@MGAID", SqlDbType.Int).Value = mgaId;
            cmd.Parameters.Add("@MaskDate", SqlDbType.Date).Value = maskDate;
            
            // 打开数据库连接
            conn.Open();
            
            // 标量函数返回单个值,用ExecuteScalar读取
            object result = cmd.ExecuteScalar();
            if (result != DBNull.Value)
            {
                DateTime newMaskDate = Convert.ToDateTime(result);
                Console.WriteLine($"计算后的日期为:{newMaskDate:yyyy-MM-dd}");
            }
            else
            {
                Console.WriteLine("未获取到有效计算结果");
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"执行出错:{ex.Message}");
    }
}

关键说明

  • 标量函数返回单个值,使用ExecuteScalar()方法读取效率最高,只会返回查询结果第一行第一列的值
  • 如果你的业务场景存在连续3天及以上的节假日,现有SQL函数只做了两次校验,最多支持连续2天节假日跳过,需要适配更长连续假期的话,可以修改SQL函数用循环递归的方式做多次校验
  • 生产环境建议把连接字符串写在配置文件中,不要硬编码在业务代码里,方便后续维护修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:48:01