【问题标题】:Remove column from datareader从数据读取器中删除列
【发布时间】:2009-05-13 14:20:55
【问题描述】:

我有一个小的 C# 函数,它接受任何通用 SQLDataReader 并将其转换为 csv 文件。但是,我现在需要忽略传递给它的数据读取器中的 1 列。

如何从 SQLDataReader 中删除 1 列?

查询中需要此列,主要用于排序,但在同一页面加载的另一个区域中使用,但我不希望它显示在我将生成的 csv 文件中。

编辑: 我认为我有点误导,我希望删除的列在其他情况下使用,而不是这一列,所以只需从查询中删除就可以了,但会导致我必须运行两次查询,而不是只运行一次, 这是一个更大的查询。

【问题讨论】:

    标签: c# asp.net sqldatareader


    【解决方案1】:

    传递一个你想隐藏的整数数组。整数对应于您要关闭的列的索引。您可以创建一个重载方法,这样您就不必更改程序中调用它并打印每一列的代码。

    (我在这里做了很多假设,但重载是关键)

    public void MakeMyCSV(string MyFileName, SQLDataReader DataToOutput) 
    {
        MakeMyCSV(MyFileName, DataToOutput, null);
    }
    
    public void MakeMyCSV(string MyFileName, SQLDataReader DataToOutput, int[] ExcludedColumns) //if this is your current method signature...
    {
        //iterate through each record
        //    iterate through each column
        //        if ExcludedColumns is not null then see if this column is in it
        //            if it is not in it, output it
    }
    

    【讨论】:

      【解决方案2】:

      您不会从数据读取器中删除列。如果不需要数据,则不要读取该列。如果您需要列数据进行排序,请阅读它。编写 CSV 文件时,简单地省略数据。写入 CSV 文件与使用 SqlDataReader 读取无关。

      【讨论】:

        【解决方案3】:

        添加一个参数,包括要忽略的列列表。

        我有时会有ignore_columnsinclude_columns 等参数。如果提供了ignore_columns 参数并且列表中有列,则它会被忽略。如果提供了include_columns 参数并且列不在列表中,则将其忽略。

        【讨论】:

          【解决方案4】:

          你不能!您将需要修改生成 CSV 的代码以仅处理所需的列并忽略其他列。

          【讨论】:

            【解决方案5】:

            您不需要在结果集中包含在 SQL 查询的 order by 子句中使用的列。你能把它排除在选择语句之外吗?

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2019-11-30
              • 2018-07-28
              • 2014-10-14
              • 2019-05-28
              • 2018-12-11
              • 1970-01-01
              • 2015-05-06
              相关资源
              最近更新 更多