Вызов исключения & ldquo; ExecuteNonQuery & rdquo; с & ldquo; 0 & rdquo; аргумент (ы): & ldquo; Не удалось преобразовать значение параметра из объекта [] в IEnumerable 1. & rdquo; [Дубликат]

Просто вычислите его

Hours = Seconds/3600
Minutes = (Seconds % 3600) /60
Seconds = (Seconds % 3600) % 60
20
задан kprobst 16 December 2009 в 23:15
поделиться

3 ответа

Вы можете использовать оператор запятой для обертывания коллекции строк в массиве, так что когда массив разворачивается, вы завершаете сборку исходных строк, например:

function lib_open_table([string] $sql) {
    $ds = lib_open_dataset $sql    
    return ,$ds.Tables[0]
}

По сути, вы не можете предотвратить PowerShell от разворачивания массивов / коллекций. Лучшее, что вы можете сделать, это обходное поведение, обертывающее массив / коллекцию в другом массиве с одним элементом.

23
ответ дан Keith Hill 21 August 2018 в 09:22
поделиться
  • 1
    Удивительно, это сработало. Странно, но это сработало :) Большое спасибо Кейту. – kprobst 17 December 2009 в 00:26
  • 2
    Я не понимаю, где массив разворачивается. И почему только коллекция Rows, почему бы и другое свойство? Почему бы и нет? Свойство Columns? – stej 17 December 2009 в 06:48
  • 3
    Я не гуру DataSet, но мне интересно, возвращена ли таблица данных типа TypedTableBase & lt; T & gt; который перечислим над T, были T - DataRow. – Keith Hill 17 December 2009 в 17:27
  • 4
    Вау! Это спасло меня так много времени. Я думал, что сойду с ума. Где документировано поведение? Спасибо огромное! – AaronBa 10 March 2016 в 16:51
  • 5
    Это приблизило меня, но Powershell фактически вернул объект длиной = 6; для получения данных datatable мне пришлось получить доступ к последнему значению в объекте: $returned_obj[5] – Nat 10 July 2018 в 18:40

О да, я тоже борется с этим, пока не получил этот пост .. (tnxs Keith!) [/ ​​g0]

2 вещи, которые вам нужно, чтобы сосредоточиться на a) добавить свой возвращенный объект с помощью запятая, действительно, б) когда вы заполняете свой адаптер, обязательно присвойте результат переменной (распоряжающейся) или выполните Out-Null

Я не делал Out-Null и даже с запятая запятая, я продолжал получать обратно коллекцию (item 0 = количество строк из запроса, item1 = datatable). Довел меня до ума, пока не выбрал параметр Out-null.

Очень странно ИМХО, поскольку я прошу конкретно вернуть данные, но продолжал возвращать коллекцию, даже с «,» спереди

function  Oracleconnection
{
  process
  {
  trap
    {
      Write-Host "error occured on oracle connection"
      Write-Host $_
      continue
    }
    [System.Reflection.Assembly]::LoadWithPartialName(“System.Data.OracleClient”) | out-null
    $connection = new-object system.data.oracleclient.oracleconnection( `
    "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost.host)(PORT=1800)) `
    (CONNECT_DATA=(SERVICE_NAME=myservicename)));User Id=myid;Password=mypassword;");

    $query = "SELECT country, asset FROM table "
    $set = new-object system.data.dataset
    $adapter = new-object system.data.oracleclient.oracledataadapter ($query, $connection)
    $adapter.Fill($set) | Out-Null
    $table = new-object system.data.datatable
    $table = $set.Tables[0]
    return ,$table
  }
}
4
ответ дан Adi Inbar 21 August 2018 в 09:22
поделиться

Специальные приложения PowerShell для DataTable. Он не реализует никаких обычных подозрительных интерфейсов, таких как ICollection, IList или IEnumerable, которые обычно запускают разворот. Вы можете немного вникать в это:

PS> $dt = new-object data.datatable
PS> $dt -is [collections.ienumerable]
False

Еще:

PS> $e = [management.automation.languageprimitives]::GetEnumerator($dt)
PS> $e.gettype()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
False    False    RBTreeEnumerator                         System.ValueType

-Oisin

12
ответ дан x0n 21 August 2018 в 09:22
поделиться
  • 1
    Спасибо, Ойсин, я думаю, это разъясняет, что происходит. Интересно, почему > PS делает это вообще? – kprobst 22 December 2009 в 21:11
Другие вопросы по тегам:

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