0

当我在下面运行代码时,我得到如下结果,它没有分号,并且在richtextbox 上的每一行都有一个换行符。最后一行有两个分号....有没有办法让每一行以分号结尾,然后在richtextbox上的一个行空间?

using (OracleCommand crtCommand = new OracleCommand(myCommand, conn1))
{
    using (OracleDataReader reader = crtCommand.ExecuteReader())
    {
         while (reader.Read())
         {
             if (!reader.IsDBNull(0))
             {
                 richTextBox1.AppendText(Environment.NewLine);
                 richTextBox1.AppendText(reader[0].ToString().TrimEnd('\r', '\n', ' ') + ";");
                 richTextBox1.AppendText(Environment.NewLine);
             }
         }
     }
 }

结果:

ALTER TABLE "TBL_A" ADD ("FIELD_A3" DATE)

ALTER TABLE "TBL_A" DROP ("FIELD_A6")

ALTER TABLE "TBL_A" MODIFY ("FIELD_A2" VARCHAR2(50))

ALTER TABLE "TBL_A" MODIFY ("FIELD_A4" NUMBER(5,2) DEFAULT 0)

ALTER TABLE "TBL_A" MODIFY ("FIELD_A4" NULL)

ALTER TABLE "TBL_A" MODIFY ("FIELD_A5" NOT NULL ENABLE);

;

预期结果:

ALTER TABLE "TBL_A" ADD ("FIELD_A3" DATE);

ALTER TABLE "TBL_A" DROP ("FIELD_A6");

ALTER TABLE "TBL_A" MODIFY ("FIELD_A2" VARCHAR2(50));

ALTER TABLE "TBL_A" MODIFY ("FIELD_A4" NUMBER(5,2) DEFAULT 0);

ALTER TABLE "TBL_A" MODIFY ("FIELD_A4" NULL);

ALTER TABLE "TBL_A" MODIFY ("FIELD_A5" NOT NULL ENABLE);
4

4 回答 4

0

假设这里的其他人都是对的,您只需要执行一项Read()操作。这不完全是您问题标题的答案,但它可能是您所需要的。

只是为了澄清,我认为使用下面的代码是错误的,您应该清楚自己到底是什么OracleDataReader,以及该方法究竟Read()执行了什么。

        using (OracleCommand crtCommand = new OracleCommand(myCommand, conn1))
        {
            using (OracleDataReader reader = crtCommand.ExecuteReader())
            {
                reader.Read();
                string[] splitted = reader[0].ToString().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

                foreach (string line in splitted)
                {
                    richTextBox1.AppendText(Environment.NewLine + line.Trim() + ";" + Environment.NewLine);
                }
            }
        }
于 2013-07-24T17:41:42.050 回答
0

我认为这将提供预期的结果:

richTextBox1.AppendText(string.Format("{0} ;\r\n" + Environment.NewLine, reader[0]));

在这里,您将整个字符串格式化,添加对象和所需的字符,将所有过程转换为 1 行。有了这个,你的代码将是这样的:

if (!reader.IsDBNull(0))
{
     richTextBox1.AppendText(string.Format("{0} ;\r\n" + Environment.NewLine, reader[0]));         
}
于 2013-07-24T23:34:19.190 回答
0

您可以尝试以下方法,看看是否有效:

using (OracleCommand crtCommand = new OracleCommand(myCommand, conn1))
                    {
                        using (OracleDataReader reader = crtCommand.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (!reader.IsDBNull(0))
                                {
                                    richTextBox1.AppendText(string.Format("{0}{1}{2}{3}", Environment.NewLine, reader[0].ToString().TrimEnd('\r', '\n', ' '),";", Environment.NewLine));

                                }
                            }
                        }

                    }
于 2013-07-24T16:02:12.857 回答
0

我打赌你只有两个结果。第一个是整个文本,第二个只是空字符串。

建议你调试一下,用断点和局部变量来证明:

richTextBox1.AppendText(Environment.NewLine);
var text = reader.GetString(0);
//breakpoint on next line and inspect text
richTextBox1.AppendText(text.TrimEnd('\r', '\n', ' ') + ";");
richTextBox1.AppendText(Environment.NewLine);
于 2013-07-24T16:03:19.653 回答