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

C#中SqlDataReader日期字段调用ToString带参数报无重载错误求助

报错原因

SqlDataReader的索引器返回值为object类型,object类的ToString()方法无带参数的重载,因此直接调用ToString("dd-MM-yyyy")会触发编译错误。

解决方案

下面提供3种可直接落地的方案,你可以根据自己的项目习惯选择:

  • 方案1:后端先转换为DateTime类型再格式化
    先判断字段是否为数据库空值,再转换为DateTime类型后调用带格式的ToString方法,示例代码如下:

    while (dr.Read())
    {
        DBtoRestore currentdgUID = new DBtoRestore
            {
                CUID_dbname = dr["DB_name"].ToString(),
                CUID_RaisonSoc = dr["RS_name"].ToString(),
                // 新增空值判断+类型转换逻辑
                CUID_DateFinExercice = dr.IsDBNull("RS_DateFinExercice") 
                    ? string.Empty 
                    : dr.GetDateTime(dr.GetOrdinal("RS_DateFinExercice")).ToString("dd-MM-yyyy", System.Globalization.CultureInfo.InvariantCulture),
                CUID_IsClosed = dr["RS_IsClosed"].ToString()
            };
        dgUIDcollection.Add(currentdgUID);
    }
    

    加上CultureInfo.InvariantCulture是为了避免系统区域设置影响日期分隔符,确保始终输出-作为分隔符。

  • 方案2:SQL查询阶段直接格式化日期为字符串
    在查询语句中直接用SQL的日期转换函数输出符合要求的字符串,不需要修改C#逻辑,修改SQL中RS_DateFinExercice的取值逻辑即可:

    -- 用CONVERT函数的105格式输出dd-MM-yyyy格式的日期字符串
    RS_DateFinExercice = CAST(CONVERT(VARCHAR(10), (SELECT Max(v) FROM (VALUES (a.[D_FinExo01]), (a.[D_FinExo02]), (a.[D_FinExo03]),(a.[D_FinExo04]),(a.[D_FinExo05])) AS value(v)), 105) AS VARCHAR(100)),
    
  • 方案3:DataGrid绑定阶段指定格式(仅适用于CUID_DateFinExercice为DateTime类型的场景)
    如果你的DBtoRestore类中CUID_DateFinExercice属性是DateTime类型,不需要修改后端读取逻辑,直接在XAML的DataGrid列绑定时指定字符串格式即可:

    <DataGrid x:Name="dgDBtoRestore" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <!-- 其他列 -->
            <DataGridTextColumn Header="财务年度结束日" Binding="{Binding CUID_DateFinExercice, StringFormat='dd-MM-yyyy'}" />
        </DataGrid.Columns>
    </DataGrid>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:21:01