一尘不染

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

sql

我在该网站和Google上进行了查看,但似乎找不到针对我要尝试的解决方案的好方法。

基本上,我有一个客户端服务器应用程序(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格式放入字符串的任何提示。列和字段可能会有所不同,因此我无法使用某些站点中所见的something
[something]方法。我不确定我是否会被理解!

我真的很感谢有关此操作的任何提示/要点!


阅读 159

收藏
2021-05-05

共1个答案

一尘不染

这是我用来将任何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();
}
2021-05-05