【问题标题】:Replacing 01/01/1900 from SQL resultset and exporting to Excel using C#从 SQL 结果集中替换 01/01/1900 并使用 C# 导出到 Excel
【发布时间】:2015-06-24 22:47:23
【问题描述】:
                foreach (var item in bh)
        {
            worksheet.Cells[rowNumber, 1].Value = item.bill_number;
            worksheet.Cells[rowNumber, 2].Value = item.yearref + @"\" + item.monthref;
            worksheet.Cells[rowNumber, 3].Value = item.stdate.ToShortDateString();
            worksheet.Cells[rowNumber, 4].Value = item.enddate.ToShortDateString();
            worksheet.Cells[rowNumber, 5].Value = item.duration;
            worksheet.Cells[rowNumber, 6].Value = item.last_reading;
            worksheet.Cells[rowNumber, 7].Value = item.new_reading;
            worksheet.Cells[rowNumber, 8].Value = item.usage;
            worksheet.Cells[rowNumber, 9].Value = item.totaldueamt;
            worksheet.Cells[rowNumber, 10].Value = item.total_paid;
            worksheet.Cells[rowNumber, 11].Value = item.paid_date.ToShortDateString();     }

我有上面的代码循环通过一个 SQL 结果集,该结果集稍后用于导出到 Excel,当 item.paid_date 为空时,在导出的 Excel 工作表中,日期显示为 01/01/1900,我该如何如果日期为空,将 item.paid_date 替换为 ''?

这里是存储过程,有时读取表中不会有任何记录where bg.bill_number = p.bill_number

CREATE PROCEDURE [dbo].[BillHistory] @accNo varchar(50) as begin select bg.Id, bg.account_number, bg.bill_number, bg.year, bg.month, bg.usagetotal, bg.fineamt, bg.fuelcharge, bg.othercharge, bg.totalamt, bg.totaldueamt, bg.billdate, bg.bill_due_date, bg.outstanding_amt, bg.[desc], readingId = re.Id, re.accountno, re.oldccountNo, re.new_reading, re.last_reading, re.meterno, re.yearref , re.monthref , re.referencecount, re.stdate, re.enddate, current_reading_date = re.created_on, pre_reading_date = isnull((select top 1 c.created_on from reading c where c.accountno = @accNo and c.Id < re.Id order by c.Id desc),CAST(-53690 as datetime)), re.duration, re.usage, re.averageusage, re.averageconsumption, isnull((select p.total_paid from payment p where bg.bill_number = p.bill_number ),0) as total_paid, isnull((select p.created_on from payment p where bg.bill_number = p.bill_number ),0) as paid_date from reading re join billing_gen bg on re.Id=bg.reading_id where re.accountno = @accNo and bg.enable=1 order by bg.Id asc; end;

【问题讨论】:

  • 如果item.paid_date == null 没有产生预期的结果,您可以尝试item.paid_date == System.DBNull.ValueIDataReader 对象也有一个 IsDbNull 方法,如果 SQL 结果存储在 DataReader 中,您应该能够使用它。例如。 IDataReader reader; sqlReader = ExecuteReader("StoredProc",args); if (!sqlReader.IsDbNull(0)) tmp = reader.GetString(0);

标签: c# export-to-excel sqldatetime


【解决方案1】:

你试过了吗:

worksheet.Cells[rowNumber, 11].Value = item.paid_date == null ? string.Empty : item.paid_date.ToShortDateString(); 

?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 2019-06-12
    相关资源
    最近更新 更多