C# 将SQL Server数据导出到txt文件-c时,不在最后一列后添加分隔符

C# 将SQL Server数据导出到txt文件-c时,不在最后一列后添加分隔符,c#,sql-server,delimiter,filereader,export-to-text,C#,Sql Server,Delimiter,Filereader,Export To Text,我正在将表的数据从SQL Server导出到文本文件 我想在每一列后面附加一个分隔符,除了最后一列标题+数据之外,但我编写的代码也在最后一列后面添加了一个分隔符 我怎样才能预防它 public static void export_to_txt() { SqlDataReader reader; string query = "Select * from tablename"; string connStr = ConfigurationManager.Connecti

我正在将表的数据从SQL Server导出到文本文件

我想在每一列后面附加一个分隔符,除了最后一列标题+数据之外,但我编写的代码也在最后一列后面添加了一个分隔符

我怎样才能预防它

public static void export_to_txt()
{
    SqlDataReader reader;

    string query = "Select * from tablename";
    string connStr = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
    string strDelimiter = "\t";
    string strFilePath = @"mypath";

    StringBuilder sb = new StringBuilder();

    using (SqlConnection conn = new SqlConnection(connStr))
    {
        conn.Open();

        using (reader = new SqlCommand(query, conn).ExecuteReader())
        {
            for (int i = 0; i < reader.FieldCount; i++)
            {
                sb.Append(reader.GetName(i));
                sb.Append(strDelimiter);
            }

            sb.Append(Environment.NewLine);

            if (reader.HasRows)
            {
                Object[] items = new Object[reader.FieldCount];

                while (reader.Read())
                {
                    reader.GetValues(items);

                    foreach (var item in items)
                    {
                        sb.Append(item.ToString());
                        sb.Append(strDelimiter);
                    }

                    sb.Append(Environment.NewLine);
                }
            }
        }

        conn.Close();
        File.WriteAllText(strFilePath, sb.ToString());
    }
}
请改用string.Join:

对于标题行,可以将其读入列表或使用LINQ:

var headers = Enumerable.Range(0, reader.FieldCount).Select(i => reader.GetName(i));
然后使用string.Join。

使用string.Join:

对于标题行,可以将其读入列表或使用LINQ:

var headers = Enumerable.Range(0, reader.FieldCount).Select(i => reader.GetName(i));

然后使用string.Join。

您需要修改此代码:

for (int i = 0; i < reader.FieldCount; i++)
{
    sb.Append(reader.GetName(i));
    sb.Append(strDelimiter);
}


您需要修改此代码:

for (int i = 0; i < reader.FieldCount; i++)
{
    sb.Append(reader.GetName(i));
    sb.Append(strDelimiter);
}


它给了我错误4运算符'@ummehabibasidqui更新了我的答案。。。我不知道你为什么会犯这个错误。它给了我错误4运算符'@Ummehabibasidqui更新了我的答案。。。但不确定为什么会出现此错误。@Ummehabibasidqui:对于只需要先在IEnumerable中获取标题的标题,请参阅更新的答案。@Ummehabibasidqui:对于只需要先在IEnumerable中获取标题的标题,请参阅更新的答案。
using (reader = new SqlCommand(query, conn).ExecuteReader())
{
     for (int i = 0; i < reader.FieldCount; i++)
     {
           sb.Append(reader.GetName(i));
           if( i < (reader.FieldCount -1)
               sb.Append(strDelimiter);
     }
     sb.Append(Environment.NewLine);
     if (reader.HasRows)
     {
          Object[] items = new Object[reader.FieldCount];

          while (reader.Read())
          {
                reader.GetValues(items);
                sb.Append(string.Join(strDelimiter,item.ToString()));
                sb.Append(Environment.NewLine);
          }
      }
 }