Можно ли использовать файл .csv в качестве источника данных в Visual Studio 2008? - PullRequest
1 голос
/ 31 марта 2010

Я довольно новичок в C # и Visual Studio. Я пишу небольшую программу, которая будет читать файл .csv, а затем записывать прочитанные записи в таблицу базы данных SQL Server. Я могу вручную проанализировать файл .csv, но мне было интересно, можно ли как-то «описать» файл .csv в Visual Studio, чтобы я мог использовать его в качестве источника данных? Следует отметить, что первые две строки в файле .csv содержат информацию заголовка, а следующие строки являются фактическими данными, разделенными запятыми.

Кроме того, я должен отметить, что эта программа является автономной консольной программой без пользовательского интерфейса.

Ответы [ 5 ]

3 голосов
/ 31 марта 2010

Это отличный пример использования возможностей LINQ. Вот краткий справочник с примером того, как это сделать.

Вот и все.Вы можете прочитать в CSV строковый массив, а затем использовать LINQ для запроса к этой коллекции.Однако, как указывает Рид, вам придется кодировать строку заголовка, так как это скинет ваш запрос.

Вы также можете использовать TextFieldParser для обработки экранированных запятых. Вот пример для thinqlinq, который использует TextFieldParser для анализа файла и запрос LINQ для получения результатов.Он даже имеет модульный тест, чтобы убедиться, что экранированные запятые обрабатываются.

1 голос
/ 08 мая 2018

Ссылка в посте разработчиков 4.0 исчезла. Код в этой ссылке был следующим:

class CSVParser
 {
   public static DataTable ParseCSV(string path)
   {
     if (!File.Exists(path))
    return null;

string full = Path.GetFullPath(path);
  string file = Path.GetFileName(full);
  string dir = Path.GetDirectoryName(full);

  //create the "database" connection string 
  string connString = "Provider=Microsoft.Jet.OLEDB.4.0;"
    + "Data Source=\"" + dir + "\\\";"
    + "Extended Properties=\"text;HDR=No;FMT=Delimited\"";

  //create the database query
  string query = "SELECT * FROM " + file;

  //create a DataTable to hold the query results
  DataTable dTable = new DataTable();

  //create an OleDbDataAdapter to execute the query
  OleDbDataAdapter dAdapter = new OleDbDataAdapter(query, connString);

  try
  {
    //fill the DataTable
    dAdapter.Fill(dTable);
  }
  catch (InvalidOperationException /*e*/)
  { }

  dAdapter.Dispose();

  return dTable;
   }
 }
}
1 голос
/ 31 марта 2010

Использование встроенного анализатора OLEDB CSV через C # для анализа файла CVS. Вы можете найти образец здесь

Это в основном позволяет вам обращаться с CSV-файлом как с таблицей базы данных.

1 голос
/ 31 марта 2010

Анализировать его вручную очень просто, и у вас может быть программа, которая анализирует его, удаляет первые две ненужные строки и затем передает их непосредственно в SSIS.

Вот ссылка на использование LINQ для чтения: http://blogs.msdn.com/wriju/archive/2009/05/24/linq-to-csv-getting-data-the-way-you-want.aspx

1 голос
/ 31 марта 2010

Если у вас 2-строчный заголовок, это не стандартный файл CSV.

В этом случае автоматические инструменты не будут работать, и вам придется вернуться к анализу файла вручную.

Если вы хотите удалить одну из строк заголовка, вы можете использовать этот метод синтаксического анализа файлов CSV в ADO.NET DataTable .

Однако, если нет, то TextFieldParser в сборке Microsoft.VisualBasic.dll (также можно использовать из C #) делает анализ файлов CSV очень простым.

...