将数据表写入c#中的管道分隔文件(.psv)问题

时间:2015-03-19 17:39:05

标签: c# .net file-io file-writing

我使用下面的代码将数据表写入管道分隔文件(|)。问题是我在数据库中有一个包含 \ r \ n 的html模板。由于数据中的 \ r \ n ,数据在psv文件中逐行获取。为了克服这个问题,我已经尝试了几种方法来解决它,但没有运气..所以当我有一个包含\ r \ n的数据时,就会发生问题。任何人都猜到为什么会出现这个问题。

public static  void start()
            {
             string filePath = @"E:\Files\2.psv;
            string ConnectionString = "server=localhost;database=sql       
                                       sample;Integrated Security=SSPI;";
            con.ConnectionString = ConnectionString;
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "[dbo].[getDetailsCodeId]";
            cmd.Parameters.AddWithValue("@id", Id);
            con.Open();

            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds);
            DataTable dt = new DataTable();
            dt = ds.Tables[0];
            StringBuilder sb = new StringBuilder();
            bool isColumnNameAppend = false;
            FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate,     
            FileAccess.ReadWrite);
            StreamWriter str = new StreamWriter(fs);
            int count = dt.Columns.Count;
            str.BaseStream.Seek(0, SeekOrigin.End);

           if (!isColumnNameAppend)
            {
                for (int i = 0; i < count; i++)
                {
                    sb.Append(dt.Columns[i].ColumnName + '|');
                }
                sb.Append(Environment.NewLine);
                isColumnNameAppend = true;
            }

            for (int j = 0; j < dt.Rows.Count; j++)
            {
                for (int k = 0; k < dt.Columns.Count; k++)
                {
                    sb.Append(PsvQuote((dt.Rows[j][k].ToString())) + '|');
                }
                sb.Append(Environment.NewLine);
            }

            str.Write(sb.ToString());
            str.Flush();
            str.Close();
            fs.Close();
          }

   public static string PsvQuote(string text)
    {
              text = String.Format("\"{0}\"", text);
              return text;
    }

1 个答案:

答案 0 :(得分:0)

   public static string PsvQuote(string text)
    {
              text = String.Format("\"{0}\"", text.Replace("|","").Replace("\r","").Replace("\n","");
              return text;
    }