将数据流式传输到.csv不显示结果C#

将数据流式传输到.csv不显示结果C#,c#,sql-server,streamwriter,data-stream,C#,Sql Server,Streamwriter,Data Stream,我试图将数据从SQLServer数据库流式传输到.CSV文件;但是,在执行之后,.csv仍然是空的。第一个while循环用于正确执行的测试目的。我知道我在流媒体部分做错了什么 非常感谢您的帮助 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Diagnostics; using System.IO; using System.Linq; using System.T

我试图将数据从SQLServer数据库流式传输到.CSV文件;但是,在执行之后,.csv仍然是空的。第一个while循环用于正确执行的测试目的。我知道我在流媒体部分做错了什么

非常感谢您的帮助

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnection conn = new SqlConnection("Server=*******;Database=*********;Integrated Security=true");
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT p.cFName, p.cLName, s.cSugTitle, s.cEcrno, g.cName, h.mNotes, u.UserID, u.NetworkID FROM people p INNER JOIN suggest s ON p.cidPeople = s.cidPeople_WhoEntered INNER JOIN Grp g on s.cidGrp = g.cidGrp INNER JOIN history h ON h.cidSuggest = s.cidSuggest INNER JOIN users u ON u.cidPeople = p.cidPeople", conn);
            SqlDataReader reader = cmd.ExecuteReader();

        while (reader.Read())
        {
            Console.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), reader.IsDBNull(5) ? null : reader.GetString(5), reader.GetString(6), reader.IsDBNull(7) ? null : reader.GetString(7));
        }


        String path = @"C:\Users\AEEVANS\Desktop\example.csv";

        using (StreamWriter sr = File.AppendText(path))
        {
            while (reader.Read())
            {
                sr.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), reader.IsDBNull(5) ? null : reader.GetString(5), reader.GetString(6), reader.IsDBNull(7) ? null : reader.GetString(7));
                sr.Close();
            }  
        }
        Console.ReadKey();

        reader.Close();
        conn.Close();

        if (Debugger.IsAttached)
        {
            Console.ReadLine();
        }
    }
  }
}
编辑 我已经编辑了我的原始代码,不包括每个建议的第一个while循环。我现在遇到以下错误:

System.ObjectDisposedException:“无法写入已关闭的TextWriter。”

while(reader.Read())
是通过数据读取器的单向行程。如果您在(reader.Read())期间执行另一个
,您将一无所获,因为指针已经位于读取器内容的末尾

看起来您应该能够将两个
while(reader.Read())
块组合为一个。

while(reader.Read())
是通过数据读取器的单向行程。如果您在(reader.Read())
期间执行另一个
,您将一无所获,因为指针已经位于读取器内容的末尾


看起来您应该能够将两个
while(reader.Read())
块组合成一个块。

在第一个循环(reader.Read()之后,读卡器处于EOF。这就是为什么第二个循环没有执行任何操作。请摆脱第一个循环。您还应该使用块将连接、命令和读卡器包装在一起。此外,在循环中关闭Streamwriter将使您的文件中只有一条记录。如果有更多记录,您将永远看不到它们,同时将引发异常在第一个循环(reader.Read()之后,在第二个循环尝试写入闭合流时,读卡器处于EOF。这就是为什么第二个循环没有执行任何操作。请摆脱第一个循环。您还应该使用块将连接、命令和读卡器包装在一起。此外,在循环中关闭Streamwriter将使您的文件中只有一条记录。如果有更多记录,您将永远看不到它们,同时将引发异常在尝试写入闭合流的第二个循环中,我根据建议删除了第一个while循环。我现在收到以下错误:System.ObjectDisposedException:“无法写入闭合的TextWriter.”在我的sr.WriteLine()之后;这是因为Steve在评论中所说的。您需要在
while(reader.Read())之后移动
sr.Close
block。不知道我怎么会错过它。谢谢!我根据建议删除了第一个while循环。我现在收到以下错误:System.ObjectDisposedException:“无法写入关闭的TextWriter。”在我的sr.WriteLine();这是因为Steve在评论中说的。你需要在
while(reader.Read())
块之后移动
sr.Close
。不知道我怎么会错过这个。谢谢!
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            SqlConnection conn = new SqlConnection("Server=********;Database=*********;Integrated Security=true");
            conn.Open();
            SqlCommand cmd = new SqlCommand("SELECT p.cFName, p.cLName, s.cSugTitle, s.cEcrno, g.cName, h.mNotes, u.UserID, u.NetworkID FROM people p INNER JOIN suggest s ON p.cidPeople = s.cidPeople_WhoEntered INNER JOIN Grp g on s.cidGrp = g.cidGrp INNER JOIN history h ON h.cidSuggest = s.cidSuggest INNER JOIN users u ON u.cidPeople = p.cidPeople", conn);
            SqlDataReader reader = cmd.ExecuteReader();

            String path = @"C:\Users\AEEVANS\Desktop\example.csv";

            using (StreamWriter sr = File.AppendText(path))
            {
                while (reader.Read())
                {
                    sr.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}", reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), reader.IsDBNull(5) ? null : reader.GetString(5), reader.GetString(6), reader.IsDBNull(7) ? null : reader.GetString(7));
                    sr.Close();
                }
            }

            reader.Close();
            conn.Close();

            if (Debugger.IsAttached)
            {
                Console.ReadLine();
            }

        }
        }
    }