将逗号分隔数据导入数据表
通过Web应用程序将CSV导入数据库最简单的方法是什么?将逗号分隔数据导入数据表
UPDATE:
CSV的小例子:
stop_id, stop_name, stop_desc, stop_lat, stop_lon, zone_id, stop_url
TR, Trenton, , 40.2177778, -74.7550000, 6,
LVTN, Levittown-Tullytown, , 40.1402778, -74.8169444, 5,
BRST, Bristol, , 40.1047222, -74.8547222, 4,
CROY, Croydon, , 40.0936111, -74.9066667, 4,
EDGT, Eddington, , 40.0830556, -74.9336111, 4,
CORN, Cornwells Heights, , 40.0716667, -74.9522222, 3,
TORR, Torresdale, , 40.0544444, -74.9844444, 3,
HOLM, Holmesburg Jct, , 40.0327778, -75.0236111, 2,
如果拿Portable and Efficient Generic Parser for Flat Files和创建有它的一个引用一个新的Visual C#控制台应用程序,下面的代码将一个CSV文件的内容加载到数据表:
using GenericParsing;
using System.Data;
namespace CsvToDataTable
{
public class Program
{
static void Main(string[] args)
{
var pathOfCsvFile = @"C:\MyFile.csv";
var adapter = new GenericParsing.GenericParserAdapter(pathOfCsvFile);
DataTable data = adapter.GetDataTable();
}
}
}
下一步是将数据data
保存到数据库服务器。此代码假定CSV文件的结构相匹配正是一个表的数据库称为TableName
:
private static void SaveDataToDatabase(DataTable data)
{
var connectionString = "CONNECTION STRING GOES HERE";
var commandText = "INSERT INTO [databasename].[dbo].[TableName] " +
"(stop_id, stop_name, stop_desc, stop_lat, stop_lon, zone_id, stop_url) " +
"VALUES (@stop_id, @stop_name, @stop_desc, @stop_lat, @stop_lon, @zone_id, @stop_url)";
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
foreach (DataRow row in data.Rows)
{
using (var command = new SqlCommand(commandText, connection))
{
command.Parameters.AddWithValue("@stop_id", row["stop_id"]);
command.Parameters.AddWithValue("@stop_name", row["stop_name"]);
command.Parameters.AddWithValue("@stop_desc", row["stop_desc"]);
command.Parameters.AddWithValue("@stop_lat", row["stop_lat"]);
command.Parameters.AddWithValue("@stop_lon", row["stop_lon"]);
command.Parameters.AddWithValue("@zone_id", row["zone_id"]);
command.Parameters.AddWithValue("@stop_url", row["stop_url"]);
command.ExecuteNonQuery();
}
}
}
}
你会再想要在你的Main
方法添加到SaveDataToDatabase
通话。我认为这里有足够的代码让你调整它来适应你的目的。
@Rob你可以请,如果你不介意。我正在下载该解析器。另外,我知道这可能听起来很愚蠢,但在添加引用.dll文件之后,是否将上面的代码放在Web表单中?如果不是什么文件类型。 – balexander 2010-08-26 14:31:28
@ Bry4n,这是一个“控制台应用程序”。如果你愿意,你可以在WebForm中完成,但总体原则是一样的! =) – Rob 2010-08-26 14:39:03
@Rob创建Web应用程序更容易吗?我认为我的老板最终会在网络应用程序中要求哈哈。感谢您的帮助Rob。 – balexander 2010-08-26 14:40:42
这真的要取决于你的情况。这是一个内部文本文件被加载到SqlServer 2005或更高版本的数据库(也是内部)吗?如果是这样,您可以编写一个SSIS包(或者更简单地说,使用SQL Server的“导入数据...”向导),它只会为您读取它。
是否有理由担心未转义的逗号(比如说,名称格式在Last,First中的名称列)?那么你需要弥补这一点...(在这个问题上,这里有很多关于SO的问题)。
文件不是内部的,也就是说,有人正在上传它,它需要实时阅读吗?然后,SSIS包仍然是你最好的选择,并且设置一些代码(现代FTP服务器通常可以调用可执行文件或批处理文件)以在文件到达时启动SSIS包。
这确实是一个非常广泛的各种问题,并没有更详细的,我不知道具体怎么你会得到的将是答案...
我明白这是广泛的。现在它将会是内部的,但可能会成长为在线,让人们只是去上传并更新数据。这可能意味着我应该走这条路。我不相信未转义的逗号是一个问题。 – balexander 2010-08-26 14:24:28
[如何将csv文件读入.net数据表](http://stackoverflow.com/questions/1050112/how-to-read-a-csv-file-into-a-net- datatable) – Rob 2010-08-26 14:10:27
CSV代表“逗号分隔值”,这是“逗号分隔”的另一种说法。如果你确定这不是你的文本文件的情况,请向我们展示一个你问题中的内容样本=)你还需要更清楚你所说的“直接导入”的意思,编写一个小的Windows控制台应用程序是否可以接受? – Rob 2010-08-26 14:14:31
哦,真的没有你的权利哈哈。但那里的答案看起来像一个网页插入,而不是直接导入。还是我仍然错了? – balexander 2010-08-26 14:15:43