C#SQLServer检索结果并以.csv格式放置

我看了一下网站和谷歌,但我似乎无法找到一个很好的解决方案,我正在尝试做什么。

基本上,我有一个客户端服务器应用程序(C#),我向服务器发送一个SQL select语句(连接到SQL Server 2008),并希望以CSV方式将结果返回给客户端。

到目前为止,我有以下内容:

if (sqlDataReader.HasRows) { while(sqlDataReader.Read()) { //not really sure what to put here and if the while should be there! } 

}

不幸的是,我真的很想将C#与SQL连接起来。 我需要有关如何简单地将结果放在csv格式的字符串中的任何提示。 列和字段可能不同,所以我不能使用某些东西的方法,就像我在一些网站上看到的那样。 我不确定我是否可以理解了!

我非常感谢有关如何解决这个问题的任何提示/要点!

这是我用来将任何IDataReader转储到StreamWriter的方法。 我通常像这样创建StreamSwriter: new StreamWriter(Response.OutputStream) 。 我将输入中的任何双引号字符转换为单引号字符(可能不是处理此问题的最佳方法,但它适用于我)。

 public static void createCsvFile(IDataReader reader, StreamWriter writer) { string Delimiter = "\""; string Separator = ","; // write header row for (int columnCounter = 0; columnCounter < reader.FieldCount; columnCounter++) { if (columnCounter > 0) { writer.Write(Separator); } writer.Write(Delimiter + reader.GetName(columnCounter) + Delimiter); } writer.WriteLine(string.Empty); // data loop while (reader.Read()) { // column loop for (int columnCounter = 0; columnCounter < reader.FieldCount; columnCounter++) { if (columnCounter > 0) { writer.Write(Separator); } writer.Write(Delimiter + reader.GetValue(columnCounter).ToString().Replace('"', '\'') + Delimiter); } // end of column loop writer.WriteLine(string.Empty); } // data loop writer.Flush(); } 

您可以调整此处提供的CSV编写器的实现。

如果您还需要解析CSV文件, 这里的实现相对较好。

CSV格式比它看起来更复杂 – 特别是如果你要处理从查询返回的任意数据。 您需要能够处理特殊字符(如引号和逗号)的转义,处理换行符等。 您最好找到并使用经过validation的实现 – 特别是如果您是C#的新手。

您可以像这样获取表列名:

 SqlConnection conn = new SqlConnection(connString); conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataReader rdr = cmd.ExecuteReader(); DataTable schema = rdr.GetSchemaTable(); foreach (DataRow row in schema.Rows) { foreach (DataColumn col in schema.Columns) Console.WriteLine(col.ColumnName + " = " + row[col]); } rdr.Close() conn.Close(); 

当然,您可以仅使用第一行确定列名称,此处它会在每行上执行。

您现在可以使用自己的代码将列连接到CSV行中,非常容易…

谢谢

如上所述,分隔符存在相当多的问题,正确地转义字符以及正确格式化不同类型。 但是,如果您只是在寻找将数据放入字符串的示例,那么这是另一个。 它没有检查上述并发症。

  public static void ReaderToString( IDataReader Reader ) { while ( Reader.Read() ) { StringBuilder str = new StringBuilder(); for ( int i = 0; i < Reader.FieldCount; i++ ) { if ( Reader.IsDBNull( i ) ) str.Append( "null" ); else str.Append( Reader.GetValue( i ).ToString() ); if ( i < Reader.FieldCount - 1 ) str.Append( ", " ); } // do something with the string here Console.WriteLine(str); } } 

在处理CSV文件时,我通常会使用FileHelpers库:它有一个SqlServerStorage类,您可以使用该类从SQL服务器读取记录并将其写入CSV文件。