我正在尝试将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();
我认为问题出在我的阅读中。
答案 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();
}