通过Web应用程序将CSV导入数据库的最简单方法是什么?
更新:
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,
答案 0 :(得分:1)
如果您使用Portable and Efficient Generic Parser for Flat Files并创建一个引用它的新Visual C#控制台应用程序,则以下代码会将CSV文件的内容加载到DataTable中:
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();
}
}
}
}
然后,您需要在SaveDataToDatabase
方法中添加对Main
的调用。我认为这里有足够的代码供您调整以适合您的目的。
答案 1 :(得分:0)
这真的取决于你的情况。这是一个内部文本文件加载到SqlServer 2005或更高版本的数据库(也是内部)?如果是这样,您可以编写一个SSIS包(或者更简单地说,使用SQL Server的“导入数据...”向导),它只会为您阅读。
是否有理由担心未转义的逗号(Say,姓名列的名称格式为Last,First)?然后你需要补偿那个......(这里有很多关于SO的问题解决了这个问题)。
文件不是内部的,也就是说有人上传它并且需要实时读取?然后,SSIS包仍然是您最好的选择,并设置一些代码(现代FTP服务器通常可以调用可执行文件或批处理文件)以在文件到达时启动SSIS包。
这真的是一个非常广泛的问题,没有更多细节,我不确定你将得到的答案有多具体......