asp.net Web表单输入到CSV文件
本文关键字:CSV 文件 输入 表单 net Web asp | 更新日期: 2023-09-27 18:10:03
我在asp中创建了一个web表单。. NET,不幸的是,由于一些限制(内部),我没有能够使用SQL的乐趣。我有一个想法,每次用户单击提交时都将数据导出到CSV文件。
这样做的目的是为了让我们有一个计算机名称、安装的软件、序列号等的列表,以便跟踪。
我从来没有做过这样的事情,因为我习惯了SQL(初学者水平),这是可能的,我怎么做(在代码形式)。我已经谷歌它和所有我得到的是网格视图和其他形式,我不想使用,甚至那些似乎比我想做的更复杂。如有任何帮助,不胜感激。
我使用c#后端来编写此代码。
澄清一下,这将是一个单一的CSV文件在我们的网络上,这个web表单将只在内部使用。所以每次有人点击提交按钮时,它都会向同一个CSV文件添加一个新的"行"。最后,我们得到了一个CSV文件,其中包含计算机名和其他信息的列表。
通常您有一个表示数据的模型类。这里有一个:
public class Computer
{
public string SerialNumber {get; set;}
public string Name {get; set;}
public List<string> InstalledSoftware {get; set;}
}
现在您有了一个可以表示数据的类,接下来就是保存或序列化它的问题了。您无法访问SQL Server数据库。这很好。还有其他选择。您可以将其存储在结构化文件格式中。CSV不适用于此,因为您可能在每台计算机上有多个InstalledSoftware,并且很难使用CSV正确处理此问题。但是其他基于文本的格式(如XML和JSON)非常适合此操作。你也可以使用"NoSQL"类型的数据库,如MongoDB或RavenDB。你也可以使用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更好的地方,但是你必须在某个地方安装服务器软件。