Для моего предыдущего вопроса я реализовал решение из этой 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
, и мой код неизбежно потерпит неудачу.
Я искал решение на эта и эта ссылка, но я не могу понять, как преобразовать строковый тип в дату.Любая помощь будет высоко ценится.Кроме того, дайте мне знать, если требуется дополнительная информация.