将每个sql列导出到txt

时间:2017-02-20 15:30:10

标签: c# sql-server-2008

我正在尝试将Table1中的所有sql列(名称)导出到txt中。问题是它只导出我的sql中的第一个名字。

这是我的代码:

 string name;
 SqlCommand command = new SqlCommand("select membername from table1 ", con);
 SqlDataReader read = command.ExecuteReader();

 while (read.Read())
 {
 name = (read["membername"].ToString());
 }
 read.Close();

 using (StreamWriter sw = new StreamWriter(@"C:\fiscal.txt"))
 {
 sw.WriteLine("{0,-0}", name.ToString());
 sw.Close(); 

我认为问题出在我的阅读中。

2 个答案:

答案 0 :(得分:1)

您循环遍历所有数据但仅保留最后一个值。循环结束后,将最后一个值存储到文件中。要解决此问题,您需要在循环中写入值

using(var con=new SqlConnection(connString))
{
    con.Open();
    var command = new SqlCommand("select membername from table1 ", con);
    using(var read = command.ExecuteReader())
    using (StreamWriter sw = new StreamWriter(@"C:\fiscal.txt"))
    {
        while (read.Read())
        {
            var name = read["membername"]);
            sw.WriteLine("{0,-0}", name);
        }
    }
}

您应该使用using块而不是手动调用Close()来确保即使抛出异常也会处理连接,文件等。

另请注意,您需要在所有地方投射或转换为字符串。 WriteLine无论如何都将其值转换为字符串。

最后请注意,name已在最里面的块中声明并使用。在其他任何地方都不需要它,因此不应该在该块之外声明

答案 1 :(得分:0)

每次进行while循环时,名称中的值都会被覆盖。更改代码,以便可以写入每个值。

 string name;
 SqlCommand command = new SqlCommand("select membername from table1 ", con);
 SqlDataReader read = command.ExecuteReader();

using (StreamWriter sw = new StreamWriter(@"C:\fiscal.txt"))
 { 
 while (read.Read())
 {
 name = (read["membername"].ToString());
 sw.WriteLine("{0,-0}", name.ToString());
 }
 read.Close();
 sw.Close(); 
}