我试图使用Data.SqlClient.SqlBulkCopy
将预定义的DataTable
插入到SQL Server数据库中。Powershell使用SqlBulkCopy插入DataTable,它包含datetime列
DataTable
中有不同的数据类型,但问题在于Datetime
列。
赞一个:
$Datatable.Columns.Add((New-Object System.Data.DataColumn 'mydate',([datetime])))
我在列数据,并且对我来说这看起来不错。
如果我尝试$row.'mydate'.Month
我得到我期望的月份。
所以它看起来像数据表填充正确的数据。
但是当我运行
$bulkCopy.WriteToServer($DataTable)
我得到这个错误:
The given value of type String from the data source cannot be converted to type datetime of the specified target column
所以这是我不明白的第一件事。为什么它说我的数据类型是字符串,当它是日期时间。 SqlBulkCopy
是否将所有数据转换为字符串?
我试图直接在数据库上重现问题,这就是我得到的。
它与日期的格式有关。我不能插入此'22-02-2017'
。但我可以插入此'02-22-2017'
。
因此很明显,在日期时间类型中存在一些混淆。
为什么SqlBulkCopy
试图在月份而不是日期中插入'22',当数据表中的数据明确无误时。
我在想这可能是一种文化的东西。但数据库文化和我的工作站文化似乎是一致的。不过我也尝试改变我的PowerShell脚本的文化,像这样:
function Set-Culture([System.Globalization.CultureInfo] $culture)
{
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
}
$culture = [System.Globalization.CultureInfo]::GetCultureInfo('en-US')
Set-Culture $culture
这并切换日期和月份,当我写出来的数据到控制台,但它不会影响BulkCopy错误。
你们有什么想法是怎么回事?