файл CSV чтения c# дает не допустимый путь

См. документы API для java.sql. Оператор .

В основном, когда Вы звоните executeUpdate() или executeQuery(), используйте Statement.RETURN_GENERATED_KEYS постоянный. Можно тогда звонить getGeneratedKeys для получения автоматически сгенерированных ключей всех строк, созданных тем выполнением. (Принятие Вашего драйвера JDBC обеспечивает его.)

Это идет что-то вроде этого:

Statement stmt = conn.createStatement();
stmt.execute(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet keyset = stmt.getGeneratedKeys();

26
задан Ryan Kohn 9 September 2014 в 14:34
поделиться

6 ответов

Хорошо, я покопался еще немного, и мне кажется, что моя строка подключения неверна. Для файлов CSV вы указываете не фактическое имя файла, а каталог, в котором он находится, например

var fileName = string.Format("{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "Uploads\\");
string connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""text;HDR=YES;FMT=Delimited""", fileName);
OleDbConnection oledbConn = new OleDbConnection(connectionString);
oledbConn.Open();
var cmd = new OleDbCommand("SELECT * FROM [countrylist.csv]", oledbConn);

И вы указываете имя файла в SelectCommand. Какой странный способ это сделать. Теперь у меня это работает.

58
ответ дан 28 November 2019 в 06:33
поделиться

Я рекомендую вам использовать синтаксический анализатор CSV вместо использования поставщика данных OLEDB.

Выполните поиск, и вы найдете много (бесплатных) кандидатов. Вот несколько из них, которые у меня сработали:

Портативный и эффективный общий анализатор плоских файлов (самый простой в использовании, IMO)
Быстрый читатель CSV (простой в использовании, отлично подходит для больших данных sets)
Библиотека FileHelpers (гибкая, включает генераторы кода, немного требует обучения)

Обычно они позволяют вам указывать свойства вашего CSV (разделитель, заголовок, квалификатор текста и т. д.) и с вызов метода, ваш CSV-файл выгружается в какую-либо структуру данных, такую ​​как DataTable или List <>.

Если вы вообще будете работать с CSV, стоит попробовать анализатор CSV.

4
ответ дан 28 November 2019 в 06:33
поделиться

Чтобы объединить пути и имена файлов, используйте:

fullFilename = System.IO.Path.Combine(folderfilepath, Filename);

в вашем примере:

var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Uploads\countrylist.csv");
2
ответ дан 28 November 2019 в 06:33
поделиться

Несколько недель назад у меня была такая же проблема, когда я пытался выполнить некоторую автоматизацию Office 2007, и я потратил слишком много времени, пытаясь ее исправить.

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";
1
ответ дан 28 November 2019 в 06:33
поделиться

Если вы просто пытаетесь прочитать файл CSV с помощью C #, проще всего использовать класс Microsoft.VisualBasic.FileIO.TextFieldParser . Фактически он встроен в .NET Framework, а не является сторонним расширением.

Да, он находится в Microsoft.VisualBasic.dll , но это не значит, что вы не можете его использовать. из C # (или любого другого языка CLR).

Вот пример использования, взятый из документации MSDN :

Using MyReader As New _
Microsoft.VisualBasic.FileIO.TextFieldParser("C:\testfile.txt")
   MyReader.TextFieldType = FileIO.FieldType.Delimited
   MyReader.SetDelimiters(",")
   Dim currentRow As String()
   While Not MyReader.EndOfData
      Try
         currentRow = MyReader.ReadFields()
         Dim currentField As String
         For Each currentField In currentRow
            MsgBox(currentField)
         Next
      Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
      MsgBox("Line " & ex.Message & _
      "is not valid and will be skipped.")
      End Try
   End While
End Using

Опять же, этот пример находится в VB.NET, но было бы тривиально переведите его на C #.

2
ответ дан 28 November 2019 в 06:33
поделиться

Если диск D является подключенным сетевым диском, вам может потребоваться использовать путь UNC:

\\computerName\shareName\path\
0
ответ дан 28 November 2019 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: