См. документы 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();
Хорошо, я покопался еще немного, и мне кажется, что моя строка подключения неверна. Для файлов 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. Какой странный способ это сделать. Теперь у меня это работает.
Я рекомендую вам использовать синтаксический анализатор CSV вместо использования поставщика данных OLEDB.
Выполните поиск, и вы найдете много (бесплатных) кандидатов. Вот несколько из них, которые у меня сработали:
Портативный и эффективный общий анализатор плоских файлов (самый простой в использовании, IMO)
Быстрый читатель CSV (простой в использовании, отлично подходит для больших данных sets)
Библиотека FileHelpers (гибкая, включает генераторы кода, немного требует обучения)
Обычно они позволяют вам указывать свойства вашего CSV (разделитель, заголовок, квалификатор текста и т. д.) и с вызов метода, ваш CSV-файл выгружается в какую-либо структуру данных, такую как DataTable или List <>.
Если вы вообще будете работать с CSV, стоит попробовать анализатор CSV.
Чтобы объединить пути и имена файлов, используйте:
fullFilename = System.IO.Path.Combine(folderfilepath, Filename);
в вашем примере:
var fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Uploads\countrylist.csv");
Несколько недель назад у меня была такая же проблема, когда я пытался выполнить некоторую автоматизацию Office 2007, и я потратил слишком много времени, пытаясь ее исправить.
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1;\"";
Если вы просто пытаетесь прочитать файл 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 #.
Если диск D является подключенным сетевым диском, вам может потребоваться использовать путь UNC:
\\computerName\shareName\path\