asp.net Web表单输入到CSV文件

时间:2015-08-27 16:14:49

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

我在asp.NET中创建了一个Web表单,遗憾的是由于某些限制(内部),我没有能力使用SQL。每当用户点击提交时,我就有了将数据导出到CSV文件的想法。

这样做的目的是让我们有一个计算机名称,安装的软件,Serial#等列表,以便跟踪。

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

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

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

1 个答案:

答案 0 :(得分: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)非常适合这种情况。你也可以使用&#34; NoSQL&#34;类型数据库,例如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);
} 

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

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