J'essaie d'importer un fichier CSV dans une base de données avec PowerShell, mais jusqu'à présent, je n'ai pas eu de chance.
Ceci est mon code (basé sur cette source ):
Start-job -Name 'ImportingData' `
-InitializationScript {Ipmo DataTableConnect -Force -DisableNameChecking} `
-ScriptBlock {$DataImport = Import-Csv -Header ("heading01","heading02","heading03") -Path $path
$DataTable = Out-DataTable -InputObject $DataImport
Write-DataTable -ServerInstance SERVER -Database DB_NAME -TableName TB_NAME -Data $DataTable
}
Où $path = C:\Users\Administrator\Desktop\TestFolder\testfile.txt
DataTableConnect est un module qui inclut ce script et le script .org / 2119.
Je ne sais pas trop où est mon problème, tous les éléments individuels semblent bien fonctionner, la seule chose qui, à mon avis, pourrait bien être le problème, est que nous en $DataTable
renvoyons un tas system.data.datarow
. Cependant, d'autres questions-réponses sur l'échange de piles indiquent que cela est prévu.
Merci, toute aide est grandement appréciée.
EDIT01: Je ne reçois aucune erreur ou rien. J'ai écrit le code dans un fichier .ps1, puis je l'ai exécuté via PowerShell 2.
Je viens de remarquer que si je l'exécute sans le travail, (ainsi le code ressemble à ceci):
Ipmo DataTableConnect -Force -DisableNameChecking
$DataImport = Import-Csv -Header ("heading01","heading02","heading03") -Path $path
$DataTable = Out-DataTable -InputObject $DataImport
Write-DataTable -ServerInstance SERVER -Database DB_NAME -TableName TB_NAME -Data $DataTable
Je me fais pas mal d'erreurs:
Write-DataTable: Write-DataTable: System.Management.Automation.MethodInvocationException: Exception appelant "WriteToServer" avec un ou plusieurs arguments "1": "La valeur donnée de type String de la source de données ne peut pas être convertie en type date du type spécifié colonne cible. " ---> System.InvalidOperationException: la valeur de type String donnée à partir de la source de données ne peut pas être convertie en type date de la colonne cible spécifiée. ---> System.FormatException: Echec de la conversion de la valeur du paramètre d'une chaîne en une dateheure. ---> System.FormatException: la chaîne n'a pas été reconnue comme un DateTime valide.
Toutes les colonnes du fichier texte sont valides et correspondent au type de données de la colonne SQL. Me donne-t-il cette erreur parce qu'il importe tout sous forme de texte? Si oui, comment pourrais-je éviter cela?
EDIT02: Je modifie les data_types de toutes les colonnes en text (ou varchar s) et en effet, il importe maintenant correctement. Il semble donc que les colonnes / données sont importées sous forme de texte (brut).
la source