C# 具有多个查询的输出

C# 具有多个查询的输出,c#,mysql,oracle,C#,Mysql,Oracle,我正在执行oracle查询,并将所述查询的结果写入txt文件 现在,如果正在处理自定义查询(由布尔值isCustom设置),则需要更改模式 架构正在更改,查询正在执行,但由于某些原因,查询输出未写入输出文件 如果isCustom设置为false,则一切正常 如有任何建议/提示,我将不胜感激 public void OracleConnect(string queryString, string fileName, bool isCustom = false) { //do

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

现在,如果正在处理自定义查询(由布尔值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);
        }
    }
public void OracleConnect(字符串queryString,字符串文件名,bool isCustom=false)
{
//下载的oracle托管数据访问.dll
//变更参考
//已将连接更改为长而不有趣的连接
//http://stackoverflow.com/questions/659341/the-provider-is-not-compatible-with-the-version-of-oracle-client#25412992
log.Debug(“任务”+Task.CurrentId+”:正在执行“+queryString”);
字符串oradb=“数据源=(描述=(地址列表=(地址=(协议=TCP)(主机=+主机+”(端口=1521)))(连接数据=(服务器=专用)(服务名称=”+实例+”));用户Id=“+oracleUser+”;密码=+oraclePassword;
尝试
{
//创建连接
OracleConnection conn=新的OracleConnection(oradb);
conn.Open();
OracleCommand cmd=新的OracleCommand();
//如果正在处理自定义查询,请更改架构
如果(isCustom==true)
{
Debug(“##测试执行自定义查询!”);
字符串changeSessionString=“ALTER SESSION SET CURRENT_SCHEMA=“+resultUser;
cmd.CommandText=
“开始”+
“立即执行”“+changeSessionString+”;”+
“立即执行”“+queryString+”;”+
“结束;”;
log.Debug(“##测试自定义查询命令=“+cmd.CommandText”);
}
其他的
{
queryString=queryString.Replace(“%pumaUser%”,resultUser);
cmd.CommandText=queryString;
}
cmd.Connection=conn;
cmd.CommandType=CommandType.Text;
OracleDataReader=cmd.ExecuteReader();
//获取内容并将其写入文件
List columnName=新列表();
columnName=GetColumnNames(读卡器);
使用(StreamWriter=newstreamwriter(文件名))
{
//将查询命令写入文件
writer.WriteLine(queryString+Environment.NewLine);
//将标题/列名写入第一行
StringBuilder标头=新的StringBuilder();
for(int i=0;i
将输出写入文本文件

>     1.spool <location\xxx.txt>   after finishing 
>     2.spool off
>1.完成后的线轴
>2.关闭
将输出写入文本文件

>     1.spool <location\xxx.txt>   after finishing 
>     2.spool off
>1.完成后的线轴
>2.关闭

我将查询更改为:
cmd.CommandText=“begin”+“execute immediate”SPOOL\”+文件名+“\”;“+“execute immediate”+“changeSessionString+”;“+“execute immediate”+”queryString+“;“+“立即执行‘假脱机’;“+”结束;“;
生成的查询类似于
OracleObject:10:24:48949[3]调试-##测试自定义查询命令=开始执行立即“SPOOL”D:\CHHC\manual\DEBUG\output\20-Apr-2017--10-24-43\ATGRZSW2240\u HOST153\custom1.txt”;执行立即“ALTER SESSION SET CURRENT\u SCHEMA=HOST153”;执行立即“SELECT COUNT(*)从project_2';execute immediate'SPOOL off';end;
但它没有提供outputSet serveroutput on和。Set echo on应该会有帮助。我将查询更改为:
cmd.CommandText=“begin”+“execute immediate'SPOOL\”+fileName+“\”;“+”立即执行“+changeSessionString+”;“+”立即执行“+”查询字符串“+”;“+”立即执行“假脱机关闭”;“+”结束;“;
生成的查询类似于
OracleObject:10:24:48949[3]调试-##测试自定义查询命令=开始执行立即“SPOOL”D:\CHHC\manual\DEBUG\output\20-Apr-2017--10-24-43\ATGRZSW2240\u HOST153\custom1.txt”;执行立即“ALTER SESSION SET CURRENT\u SCHEMA=HOST153”;执行立即“SELECT COUNT(*)从project_2';立即执行“SPOOL off”;end;
,但它不提供输出集serveroutput on和.Set