2010-02-03 104 views
2

我正在使用VB.NET和SQL Server 2005,並且我想從數據庫中編寫一個文本文件。寫一個文本文件

打開文本文件,從數據庫中讀取數據,然後寫入文本文件。

代碼。

cmd = New SqlCommand("SELECT ID, Name, Dept from table", con) 
dr = cmd.ExecuteReader 

While dr.Read() 

    Dim data As String 
    data = File.ReadAllText(dr.Item("PersonID")) 
    File.WriteAllText("D:\test.txt", data) 
End While 

上面的代碼顯示錯誤,如何寫一個文本文件

VB.NET代碼幫助

+0

那麼,什麼是錯誤? – UpTheCreek 2010-02-03 08:14:44

+0

@Sosh ReadAllText需要一個路徑,而不是數據!它讀取一個文件路徑...即使PersonID類似於C:\ myfile.txt,D:中的文件將只包含最後一個讀取文件,因爲WriteAllText會覆蓋它(始終創建一個新文件)!你不能在這裏看到大量的時間嗎? – balexandre 2010-02-03 08:30:25

+0

@balexandre - 我不是那個要求答案的人。也不確定我瞭解你的時間觀點。我的觀點是,如果你發佈有關包含錯誤的問題的問題,**當然也應該發佈錯誤。** – UpTheCreek 2010-02-04 06:56:51

回答

6

在你的代碼中,你實際上並沒有從數據庫中讀取數據。試試這個:

Using writer = New StreamWriter("d:\test.txt") 
    While dr.Read() 
     Dim id = dr.GetInt32(0) 
     Dim name = dr.GetString(1) 
     Dim dept = dr.GetString(2) 

     writer.WriteLine(String.Format("{0} {1} {2}", id, name, dept)) 
    End While 
End Using 
+0

中的顯示錯誤StreamWrite使用多長時間,File.WriteAllLines比StreamWriter快得多! – balexandre 2010-02-03 08:25:52

+0

我有20行讀取文件,獲取它的內容大小,並再次寫入文件的大小,並使用StreamRead和StreamWriter花了大約28毫秒,File.ReadAllLines和File.WriteAllLines現在需要3毫秒! – balexandre 2010-02-03 08:27:51

+0

@balexandre如果SQL查詢返回數百萬條記錄,該怎麼辦?你將把它們全部加載到內存中? – 2010-02-03 08:28:01

0

File.ReadAllText如果從文件讀取

File.WriteAllText會將所有內容寫入文件,覆蓋其中的內容。

你需要得到這樣的數據:

data = dr.Item("PersonID").ToString() 

寫作時,你可能想append the text它:

File.AppendAllText("D:\test.txt", data); 

什麼會稍微更有效的將遍歷你數據,在內存中構建整組數據(在每行末尾添加換行符),然後將其全部寫入File.WriteAllText。我假設數據量不是很大,因爲這種方法將使用更多的內存,但會導致更少的磁盤IO。

1
cmd = New SqlCommand("SELECT ID, Name, Dept from table", con) 
dr = cmd.ExecuteReader 

Dim sb as new StringBuilder 

While dr.Read() 

    ''Let's read line by line and Append it to our StringBuilder 
    sb.AppendLine(
      String.Format("{0} | {1} | {2} | {3}", 
        dr.item("ID"), dr.item("Name"), dr.item("Dept"))) 

End While 

''Now that we have all data in our StringBuilder, lets put into our file 

File.WriteAllLines("D:\test.txt", sb.ToString()) 

P.S。從一個C#人...請驗證代碼是否正確:)(C#代碼如下)

using (SqlConnection con = new SqlConnection("my Connection String")) 
{ 
    using (SqlCommand cmd = new SqlCommand()) 
    { 
     cmd.Connection = con; 
     cmd.CommandType = System.Data.CommandType.Text; 
     cmd.CommandText = "SELECT ID, Name, Dept from table"; 

     con.Open(); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     StringBuilder sb = new StringBuilder(); 

     while (dr.Read()) 
      // Let's read line by line and Append it to our StringBuilder 
      sb.AppendLine(
       String.Format("{0} | {1} | {2} | {3}", 
        dr["ID"], dr["Name"], dr["Dept"])); 

     // Now that we have all data in our StringBuilder, lets put into our file 
     File.WriteAllLines("D:\test.txt", sb.ToString()); 
    } 
} 
+0

@Balexandre,如果您使用TimeSpan來查看sb.ToString – Gopal 2010-02-03 09:07:31

相關問題