2010-08-26 3 views
1

Какой самый простой способ импортировать 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, 
+0

Возможный дубликат [Как прочитать файл csv в .net datatable] (http://stackoverflow.com/questions/1050112/how-to-read-a-csv-file-into-a-net- datatable) – Rob

+0

CSV означает «Comma Separated Values», что является еще одним способом сказать «Comma Delimited». Если вы уверены, что это не так для вашего текстового файла, покажите нам образец контента в вашем вопросе =) Вам также нужно будет уточнить, что вы подразумеваете под «прямым импортом», написав небольшое консольное приложение Windows приемлемо? – Rob

+0

О, правда, не твоего права ха-ха. Но ответ там выглядит как вставка веб-страницы, а не прямой импорт. Или я все еще не прав? – balexander

ответ

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. Я думаю, что здесь достаточно кода, чтобы настроить его, чтобы он соответствовал вашей цели.

+0

@Rob, пожалуйста, если вы не возражаете. Теперь я загружаю этот парсер. Кроме того, я знаю, что это может показаться глупым, но после добавления ссылочного файла DLL я помещаю код выше в веб-форму? Если не какой тип файла. – balexander

+0

@ Bry4n, это для «консольного приложения». Вы можете сделать это в WebForm, если хотите, но общий принцип будет таким же! =) – Rob

+0

@Rob Легче ли создать веб-приложение?Я думаю, что мой босс в конечном счете попросит об этом в веб-приложении ха-ха. Спасибо за вашу помощь. – balexander

0

Это действительно будет зависеть от вашей ситуации. Является ли это внутренним текстовым файлом, загружаемым в SqlServer 2005 или более позднюю базу данных (также внутреннюю)? Если это так, вы можете написать пакет SSIS (или, проще говоря, использовать мастер SQL Server «Импорт данных ...»), и он просто прочитает его для вас.

Есть ли причина беспокоиться о недопустимых запятых (скажем, столбец имен с форматами имен в Last, First)? Тогда вам нужно будет компенсировать это ... (здесь много вопросов на SO адресуется именно эта проблема).

Является ли файл не внутренним, то есть кто-то загружает его, и его нужно читать в режиме реального времени? Тогда пакет SSIS по-прежнему будет лучшим выбором и настроит некоторый код (современные FTP-серверы часто могут вызывать исполняемые файлы или пакетные файлы), чтобы запустить пакет SSIS при поступлении файла.

Это действительно очень широкий вид вопроса, и без более подробно, я не уверен, как конкретные ответы, которые вы собираетесь получить будет ...

+0

Я понимаю, что он был широк. Сейчас он будет внутренним, но, возможно, станет онлайн, и люди просто заходят и загружают его для обновления данных. Это, вероятно, означает, что я должен пройти по этому маршруту. Я не считаю, что недопустимые запятые - это проблема. – balexander

Смежные вопросы