c# - 输出多个查询

标签 c# mysql oracle

我正在执行 oracle 查询并将所述查询的结果写入 txt 文件。

现在,如果正在处理自定义查询(由 bool 值 isCustom 设置),我需要更改架构

模式正在改变,查询正在执行,但由于某种原因,查询输出没有写入输出文件。

如果 isCustom 设置为 false,一切正常。

如有任何建议/提示,我将不胜感激。

public void OracleConnect(string queryString, string fileName, bool isCustom = false)
    {
        //downloaded oracle managed data access.dll
        //changed reference
        //changed connection to long unfunny one
        //http://stackoverflow.com/questions/659341/the-provider-is-not-compatible-with-the-version-of-oracle-client#25412992
        log.Debug("Task " + Task.CurrentId + ": executing " + queryString);
        string oradb = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" + host + ")(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=" + instance + ")));User Id = " + oracleUser + "; Password =" + oraclePassword;
        try
        {
            //create connection
            OracleConnection conn = new OracleConnection(oradb);
            conn.Open();

            OracleCommand cmd = new OracleCommand();
            //if a custom query is being handled change the schema 
            if (isCustom == true)
            {
                log.Debug("##Test executing custom query!");
                string changeSessionString = "ALTER SESSION SET CURRENT_SCHEMA = " + resultUser;
                 cmd.CommandText =
                    "begin " +
                        "  execute immediate '"+ changeSessionString +"';" +
                        "  execute immediate '"+ queryString+"';" +
                     "end;";
                log.Debug("##Test custom query command = " + cmd.CommandText);
            }
            else
            {
                queryString = queryString.Replace("%pumaUser%", resultUser);
                cmd.CommandText = queryString;
            }

            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;

            OracleDataReader reader = cmd.ExecuteReader();

            //get and write content to file
            List<string> columnName = new List<string>();
            columnName = GetColumnNames(reader);
            using (StreamWriter writer = new StreamWriter(fileName))
            {
                //write query command to file
                writer.WriteLine(queryString + Environment.NewLine);

                //write header / column names into first line
                StringBuilder header = new StringBuilder();
                for (int i = 0; i < columnName.Count; i++)
                {
                    header.Append(columnName[i].ToString());

                    if (i != columnName.Count - 1)
                        header.Append("\t");

                }
                writer.WriteLine(header);

                //fill rest of lines with data
                while (reader.Read())
                {
                    StringBuilder row = new StringBuilder();
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        row.Append(reader[i]);

                        if (i != reader.FieldCount - 1)
                            row.Append("\t");
                    }
                    writer.WriteLine(row);
                }

            }
            log.DebugFormat("Task: {0} Writing query result into file: {1}", Task.CurrentId, fileName);

            conn.Dispose();
        }
        catch (OracleException e)
        {
            log.ErrorFormat("Task {0} had an OracleError: {1}", Task.CurrentId, e.Message);
            Helpers.writeErrorFile(fileName, e.Message);
        }
        catch (Exception e)
        {
            log.ErrorFormat("Task {0} Could not connect to database: {1} ", Task.CurrentId, e.Message);
        }
    }

最佳答案

> -for pl/sql procedures:   set serveroutput on

将输出写入文本文件

>     1.spool <location\xxx.txt>   after finishing 
>     2.spool off

关于c# - 输出多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43467149/

相关文章:

c# - 未设置时属性是否始终具有值?

MySQL 按天分组,日期时间混合不同月份的相同日期

oracle - 将oracle数据库导出到另一台服务器

sql - SQL 中的无序结果

Oracle 绑定(bind)查询非常慢

c# - 从 C# 调用非托管代码

c# - 将 C# Web 窗体添加到 VB Web 应用程序

php - MD5 哈希中的额外字符有问题吗?

c# - 是什么让 Java 编译器如此之快?

php - 一个查询中的多个计数