2010-02-03 89 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