Невозможно преобразовать строку в тип даты, используя Import-Csv - PullRequest
0 голосов
/ 10 мая 2018

Для моего предыдущего вопроса я реализовал решение из этой SO ссылки.Я использовал библиотеки .NET и использовал две функции Out-DataTable и Write-DataTable в своем решении.

В настоящее время у меня естьmy CSVs на месте и использует функции Out-DataTable и Write-DataTable для вставки данных в SQL Server.Однако он не работает с date типами данных.Я получаю сообщение об ошибке -

Write-DataTable: System.Management.Automation.MethodInvocationException: исключение, вызывающее «WriteToServer» с аргументом (ами) «1»: «Заданное значение типа String из данныхисточник не может быть преобразован в тип даты указанного целевого столбца. "--->

System.InvalidOperationException: данное значение типа String из источника данных нельзя преобразовать в дату типа указанного целевого столбца.---> System.FormatException: не удалось преобразовать значение параметра из String в DateTime.---> System.FormatException: строка не была распознана как допустимый DateTime.в System.DateTimeParse.Parse (String s, DateTimeFormatInfo dtfi, стили DateTimeStyles) в System.Convert.ToDateTime (строковое значение, поставщик IFormatProvider) в System.Convert.ChangeType (значение объекта, тип ConversionType, поставщик IFormatProvider) в System.D.SqlClient.SqlParameter.CoerceValue (значение объекта, MetaType destinationType, Boolean & coercedToDataFeed, Boolean & typeChanged, Boolean allowStreaming)

Поэтому, когда я просматривал Out-DataTable функцию, она имеет другую функцию, определенную в 1010 *, она имеет другую функцию с именемэто, что в основном делает преобразование типа столбца.Вот функция Get-Type -

function Get-Type 
{ 
    param($type) 

$types = @( 
'System.Boolean', 
'System.Byte[]', 
'System.Byte', 
'System.Char', 
'System.Datetime', 
'System.Decimal', 
'System.Double', 
'System.Guid', 
'System.Int16', 
'System.Int32', 
'System.Int64', 
'System.Single', 
'System.UInt16', 
'System.UInt32', 
'System.UInt64') 

    if ( $types -contains $type ) { 
        Write-Output "$type" 
    } 
    else { 
        Write-Output 'System.String' 

    } 
} #Get-Type 

Теперь SQL имеет тип данных date , отличный от функции .NET datetime.Следовательно, я сталкиваюсь с этой ошибкой.

У меня была мысль об использовании метода parseexact, но это опять-таки не решает проблему, поскольку она разрешает набирать string.Кроме того, Import-Csv принимает плоский файл, следовательно, дата в формате yyyy-MM-dd всегда будет иметь тип string, и мой код неизбежно потерпит неудачу.

Я искал решение на эта и эта ссылка, но я не могу понять, как преобразовать строковый тип в дату.Любая помощь будет высоко ценится.Кроме того, дайте мне знать, если требуется дополнительная информация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...