Powershell для экспорта в CSV

У меня есть метод, который (если я не сделал чего-то глупого) вчера отлично работал для экспорта в csv. Однако сегодня я продолжаю получать эту ошибку:

Исключение, вызывающее «Заполнить» с аргументом (ами) «1»: «ExecuteReader: свойство CommandText не было инициализировано»

  • $ rowCount = $ SqlAdapter.Fill ($ dt)
  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    • CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    • FullyQualifiedErrorId: InvalidOperationException

И это мой синтаксис:

$server = "serverinstance"
$database = "databaseinstance"
$savefile = "C:\Test\sqlresults.csv"
$SelectQuery = "Select Top 1 * from madeuptable"
$connectionTemplate = "Data Source={0};Integrated Security=SSPI;Initial Catalog={1};"
$connectionString = [string]::Format($connectionTemplate, $server, $database)
$connection=New-Object System.Data.SqlClient.SqlConnection($connectionString)

$cmd=$connection.CreateCommand()
$cmd.CommandText = $SelectQuery 

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
$dt = New-Object System.Data.DataTable
$rowCount=$SqlAdapter.Fill($dt)

if ($rowCount -gt 0) { $dt| Export-Csv $savefile -encoding UTF8 -NoTypeInformation }
$connection.Close()

person nospaceshuttle leftinthisnatio    schedule 15.02.2016    source источник
comment
$SelectQuery, похоже, отсутствует в сценарии ..   -  person Kenney    schedule 15.02.2016
comment
@Kenney - ошибка копирования / вставки обновлена.   -  person nospaceshuttle leftinthisnatio    schedule 15.02.2016
comment
Что, если вы запустите опубликованный фрагмент кода, это сработает?   -  person Kenney    schedule 15.02.2016
comment
@Kenney - опубликованный фрагмент кода не вызывает ошибку.   -  person nospaceshuttle leftinthisnatio    schedule 15.02.2016
comment
Я могу запустить ваш код без проблем. Ошибка копирования / вставки объясняет полученное вами сообщение об ошибке.   -  person Marc    schedule 09.11.2016


Ответы (2)


Попробуйте создать SqlDataAdaper, используя вместо этого запрос и соединение (и отбросьте cmd).

Пример:

$SqlAdapter = new-object system.data.sqlclient.sqldataadapter ($SelectQuery, $connection)
person Harald F.    schedule 15.02.2016
comment
Я закомментировал две свои строки, которые начинаются с $ cmd и добавил в yoursw, и получаю ту же ошибку. - person nospaceshuttle leftinthisnatio; 15.02.2016

Я бы проверил ваши переменные $ server и $ database. Я только что запустил ваш сценарий на моем собственном SQL-сервере, и у меня он отлично сработал.

ИЗМЕНИТЬ:

Вот что я запустил:

$server = "FAR-L2484\HOLDER_SQL"  ## Hostname\InstanceID
$database = "MASTER"
$savefile = "C:\Test\sqlresults.csv"
$SelectQuery = "SELECT * FROM information_schema.tables"
$connectionTemplate = "Data Source={0};Integrated Security=SSPI;Initial Catalog={1};"
$connectionString = [string]::Format($connectionTemplate, $server, $database)
$connection=New-Object System.Data.SqlClient.SqlConnection($connectionString)

$cmd=$connection.CreateCommand()
$cmd.CommandText = $SelectQuery 

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($cmd)
$dt = New-Object System.Data.DataTable
$rowCount=$SqlAdapter.Fill($dt)

$dt| Export-Csv $savefile -encoding UTF8 -NoTypeInformation
$connection.Close()

и это то, что я получил в C: \ test \ sqlresults.csv

"TABLE_CATALOG","TABLE_SCHEMA","TABLE_NAME","TABLE_TYPE"
"master","dbo","spt_fallback_db","BASE TABLE"
"master","dbo","spt_fallback_dev","BASE TABLE"
"master","dbo","spt_fallback_usg","BASE TABLE"
"master","dbo","spt_values","VIEW"
"master","dbo","spt_monitor","BASE TABLE"
"master","dbo","MSreplication_options","BASE TABLE"
person Michael Holder    schedule 16.02.2016