【问题标题】:asp.net Web Form Inputs to CSV Fileasp.net Web 表单输入到 CSV 文件
【发布时间】:2015-11-22 03:30:11
【问题描述】:

我在 asp.NET 中创建了一个 Web 表单,不幸的是,由于某些限制(内部),我无法使用 SQL。每次用户单击提交时,我都有将数据导出到 CSV 文件的想法。

这样做的目的是为了让我们有一个计算机名称列表、安装的软件、序列号等以进行跟踪。

我从来没有做过这样的事情,因为我习惯了 SQL(初级),这是否可能,我将如何做(以代码形式)。我用谷歌搜索了它,我得到的只是网格视图和其他我不想使用的形式,即使那些看起来比我想做的更复杂。任何帮助将不胜感激。

我正在使用 C# 后端对此进行编码。

为了澄清,这将是我们网络上的单个 CSV 文件,此网络表单将仅在内部使用。因此,每次有人单击提交按钮时,它都会向同一个 CSV 文件添加一个新的“行”。所以最后我们有一个 CSV 文件,其中包含计算机名称和其他信息的列表。

【问题讨论】:

  • 关闭,但看起来他们想在每次点击提交按钮时创建一个新的 CSV 文件。
  • 您可以使用 CSV 文件,但如果您将结构化数据存储在 XML 或 JSON 中,则更易于处理。两者都有出色的内置库。
  • 我会将其结构化为 XML 数据。在您的文件中将其另存为 XML。 Excel 基于 XML,并且会像 CSV 一样读取它。
  • 您不必自己完成所有的写作。阅读有关如何序列化/反序列化对象的信息。下面是一个关于如何使用 XML 的示例:support.microsoft.com/en-us/kb/316730

标签: c# asp.net csv webforms export-to-csv


【解决方案1】:

通常您有一个表示数据的模型类。这是一个:

public class Computer
{
    public string SerialNumber {get; set;}
    public string Name {get; set;}
    public List<string> InstalledSoftware {get; set;}
}

现在您有了一个可以表示数据的类,只需保存或序列化它即可。您无权访问 SQL Server 数据库。没关系。还有其他选择。您可以将其存储为结构化文件格式。 CSV 对此并不好,因为每台计算机可能有多个 InstalledSoftware,并且很难使用 CSV 正确处理它。但其他基于文本的格式,例如 XMLJSON 非常适合此操作。您还可以使用“NoSQL”类型的数据库,例如 MongoDBRavenDB。你也可以使用SQLite,非常轻量级。

让我们从一些示例数据开始。

List<Computer> computers = new List<Computer>();
computers.Add(new Computer(){
    SerialNumber="ABC123",
    Name="BOB-LAPTOP",
    InstalledSoftware = new List<string>(){
        "Notepad", "Visual Studio", "Word"
    }
});
computers.Add(new Computer(){
    SerialNumber="XYZ456",
    Name="JASON-WORKSTATION",
    InstalledSoftware = new List<string>(){
        "Notepad++", "Visual Studio Code", "Word"
    }
});
computers.Add(new Computer(){
    SerialNumber="LMN789",
    Name="NANCY-SURFACE3",
    InstalledSoftware = new List<string>(){
        "Outlook", "PowerPoint", "Excel"
    }
});

那么这只是保存数据的问题。让我们尝试使用 XML:

var xmlSerializer = new XmlSerializer(typeof(Computer));       
using(var stringWriter = new StringWriter())
{
    using (var xmlWriter = XmlWriter.Create(stringWriter))
    {
        xmlSerializer .Serialize(writer, computers);
        var xml = stringWriter.ToString();
        File.WriteAllText(Server.MapPath("~/App_Data/computers.xml"));
    }
}

或者使用 JSON:

var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(computers);
File.WriteAllText(Server.MapPath("~/App_Data/computers.json"));

使用 MongoDB:

var client = new MongoClient(connectionString);  
var server = client.GetServer();  
var database = server.GetDatabase("ComputerDB");  
var computerCollection= database.GetCollection<Computer>("Computers");
foreach(var computer in computers)
{  
    computerCollection.Insert(computer);
} 

注意,我没有测试过这段代码。很可能有bug。我的目标是给你一个起点,不一定是 100% 的工作代码。我有一段时间没有序列化 XML,我通常使用 JSON.NET 而不是内置的 JavaScriptSerializer。

还请注意,如果有任何可能两个用户可能同时访问数据,您需要注意 XML 和 JSON 方法以避免两个人尝试写入文件。那是 MongoDB 更好的地方,但您必须在某处安装服务器软件。

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 2015-03-15
    • 1970-01-01
    • 2018-06-29
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多