Не работает скрипт. Где ошибка?

В попытках автоматизировать процесс импорта данных пишу скрипт для запуска через определенные промежутки времени. Не могу разобраться в синтаксисе. Прошу помощи в запуске скрипта.

[void][system.reflection.Assembly]::LoadWithPartialName("MySql.Data")
$dbusername = 'root' 
$dbpassword = '123456' 
$dbname = 'test' 
$MySQLHost = 'localhost'
$csvfile = 'C:\Temp\1\'
$Files = Get-ChildItem $csvfile -Recurse -File 
$DestinationPath = 'C:\Temp\2\'

$connStr ="server=localhost;database=" + $dbname + ";Persist Security Info=false;user id=" + $dbusername + ";pwd=" + $dbpassword + ";"
$conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr)
$conn.Open()

ForEach($File in $Files) {
   Write-Host "Read and Convert $($File.Name)" -ForegroundColor Cyan 
   Get-Content $File.FullName  | Set-Content -Encoding $Encoding ($DestinationPath + $File.Name) -Force -Confirm:$false
   $cmd.CommandText = "LOAD DATA LOCAL INFILE '"$csvfile + $File.Name"' INTO TABLE `test`.`csv` FIELDS ENCLOSED BY '"' TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
   
   $cmd.ExecuteNonQuery() 
}

$conn.Close()
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
@LiS-31
1) Если вы хотите исправить ошибку - покажите ошибку. Не зная что у вас в файлах, какие настройки БД и что именно выдает скрипт в результате исполнения, остается только гадать. А экстрасенсы в отпуске.
2) У вас не совпадает количество открытых и закрытых кавычек. Вообще всю строку можно закрыть одной парой двойных кавычек "" - операции с переменными в ней отработают, в отличие от одинарных кавычек ''.
$cmd.CommandText = "LOAD DATA LOCAL INFILE '"$csvfile + $File.Name"' INTO TABLE `test`.`csv` FIELDS ENCLOSED BY '"' TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"

3) Могу предположить, что $cmd.CommandText и $cmd.ExecuteNonQuery() должны быть $conn.ExecuteNonQuery() и $conn.CommandText, иначе после открытия соединения вы к нему не обращаетесь в принципе.
Ответ написан
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Что-то мне подсказывает, что
$cmd.CommandText = "LOAD DATA LOCAL INFILE '"$csvfile + $File.Name"' INTO TABLE `test`.`csv` FIELDS ENCLOSED BY '"' TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"

надо заменить на
$cmd.CommandText = "LOAD DATA LOCAL INFILE '" + $csvfile + $File.Name + "' INTO TABLE `test`.`csv` FIELDS ENCLOSED BY '\"' TERMINATED BY ';' LINES TERMINATED BY '\n' IGNORE 1 LINES;"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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