2017-02-20 56 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是在最裏面的塊中聲明和使用的。這是其他地方不需要的,所以不應該在該塊之外聲明