2017-02-20 29 views
-1

我想从Table1中导出所有我的sql列(名称)到一个TXT。问题是它只从我的sql中导出第一个名字。导出每个sql列到txt

这里是我的代码:

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(); 

我认为这个问题是在我读的地方。

+1

您正在循环所有数据,但只保留最后一个值。 *循环结束后,将最后一个值存入文件 –

+0

我想你是来自希腊吗?谢谢你的回答。我将如何导出所有列? – Dim

+0

通过使用适当的工具 - SSIS或导出向导。如果你想生成报告,适当的工具是SSRS。你为什么使用客户端代码呢? –

回答

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(); 
} 
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是在最里面的块中声明和使用的。这是其他地方不需要的,所以不应该在该块之外声明