从Oracle数据库中提取数据

时间:2016-05-25 08:44:13

标签: c# database oracle visual-studio export

我需要您对我的代码的专业知识:)

这是我写的:

public List<List<string>> ExecuteSelectPPRD(string query, string C1, string C2, string C3, string C4, string C5)
    {
        List<List<string>> result = new List<List<string>>();

        try
        {
            using (OracleConnection conn = new OracleConnection(oradbPPRD))
            {
                conn.Open();
                using (OracleCommand cmd = new OracleCommand(query, conn))
                {
                    OracleDataReader reader = cmd.ExecuteReader();
                    DataTable dt = new DataTable();

                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            foreach (DataRow row in dt.Rows)
                            {
                                List<string> thisRow = new List<string>();
                                thisRow.Add((string)reader[C1]);
                                thisRow.Add((string)reader[C2]);
                                thisRow.Add((string)reader[C3]);
                                thisRow.Add((string)reader[C4]);
                                thisRow.Add((string)reader[C5]);
                                result.Add(thisRow);
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("No rows found.");
                    }
                    reader.Close();
                }
                conn.Dispose();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        return result;
    }

当我调用此函数时,它就像“foreach”部分不起作用。事实上,foreach被忽略了,我想知道为什么因为一切看起来都是合乎逻辑的。

目标是从oracle数据库中提取一个表,该数据库包含5列,我知道他们的名字,但我不知道行数。然后我将它导出到一个excel文件中(这部分在另一个函数中工作,现在这个部分没有问题)

提前感谢您的评论

1 个答案:

答案 0 :(得分:0)

你的foreach (DataRow row in dt.Rows)没用。当您实际读取数据读取器时,它会迭代空数据表。

您的while足以让数据阅读器继续前进到新行。只需删除foreach

即可