Ho scritto uno script molto semplice che raccoglie dati da file e cartelle e li carica in un database SQL. Credo che il mio problema sia legato al problema di parameterized sql, ma non capisco come o perché.Lo script Powershell che utilizza ExecuteNonQuery() genera l'eccezione "Sintassi errata vicino a" s "."
penso che quello che devo fare è riformattare la stringa SQL per evitare che alcuni personaggi a entrare.
Qualsiasi aiuto apprezzato.
Ecco il codice:
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $dbConnection
$Command.CommandText = "INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('$i','$items','$temp','$currentDate')"
$Command.ExecuteNonQuery()
"INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('$i','$items','$temp','$currentDate')"
Ecco l'uscita (ho spinto la stringa di comando SQL con esso come un test):
INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('ATI Te
chnologies','61.16 MB','39','05/24/2013 21:05:56')
ATI Technologies 61.16 MB 39
1
INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('ATIToo
l','0.00 MB','30','05/24/2013 21:05:56')
ATITool 0.00 MB 30
1
INSERT INTO FileSizeTable (FileName,FileSize,FileNameLength,Date) VALUES ('Auran'
,'7,496.04 MB','28','05/24/2013 21:05:56')
Auran 7,496.04 MB 28
Exception calling "ExecuteNonQuery" with "0" argument(s): "Incorrect syntax near
's'.
Unclosed quotation mark after the character string ')'."
At line:143 char:25
+ $Command.ExecuteNonQuery()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : SqlException
Uno dei tuoi articoli ha una sola citazione (cioè un apostrofo) nel nome. –
Beh, è stato veloce. Roger aveva ragione, c'era un altro apostrofo di tanto in tanto. Non sono riuscito a vedere l'errore a causa della mia sottosopra. Ho usato la sostituzione per risolvere il problema. $ x = $ x.Replace ("'", "") Ci sono altri personaggi di cui dovrei preoccuparmi? O qualche altro metodo migliore per pulire le mie corde? Per ora funziona. –
La sostituzione del personaggio ti porterà solo così lontano - ma ci sarà * sempre * qualche strano caso limite che manca. Utilizzare una query parametrizzata come il link che hai trovato spiega e la mia risposta dimostra. – alroc