PowerShell更改Data.DataTable对象的数据类型

PowerShell更改Data.DataTable对象的数据类型,powershell,csv,datatable,Powershell,Csv,Datatable,我正在编写一个脚本,该脚本使用.csv文件中的数据创建Data.DataTable。一切正常,我的数据库中有正确的值。但是为了提高数据库性能,我想为data.DataTable的列设置数据类型。不幸的是,我的所有值都被转换为字符串,从CSV到Data.DataTable列 我的CSV类似于以下示例: "Name";"UserID";"Salary" "Peter";"1";"1200.03" "Jennifer";"2";"1000.50" 我尝试了以下方法: foreach ($object

我正在编写一个脚本,该脚本使用.csv文件中的数据创建Data.DataTable。一切正常,我的数据库中有正确的值。但是为了提高数据库性能,我想为data.DataTable的列设置数据类型。不幸的是,我的所有值都被转换为字符串,从CSV到Data.DataTable列

我的CSV类似于以下示例:

"Name";"UserID";"Salary"
"Peter";"1";"1200.03"
"Jennifer";"2";"1000.50"
我尝试了以下方法:

foreach ($object in $csv){
    Write-Output "line $countline"

    foreach($property in $object.PsObject.get_properties()) 
        {   
        $property.TypeNameOfValue = [System.Type]::'System.Int32'

          ***and the other try*** 

        $property.Value = [System.Type]::'System.Int32'
        }
    }
这两次除了错误什么都没有发生

因此,我希望发生以下情况:第一列应该是字符串名称的数据类型。其他的应该是双倍或浮动


有人能解决这个问题吗?

有几种方法可以解决这个难题。我要说的是,如果您想使用字符串以外的任何东西,导入CSV有一些限制,但这是可以做到的

方法1:

示例输出:

PS C:\> $hashtable.Name
Peter
Jennifer
PS C:\> $hashtable.Name | GM
TypeName: System.String
PS C:\> $hashtable.UserID
1
2
PS C:\> $hashtable.UserID | GM
TypeName: System.Double
方法2:

这种方法比我导入Csv的传统方法简单一些,但我无法将结果合并到单个变量中。不仅是世界末日,还要做更多的工作来制作更多的CSV文件,并找出如何对其应用类型

CSV文件示例:

#TYPE System.String
"Name"
"Peter"
"Jennifer"

使用导入Csv的结果示例:

可选方法:如果你觉得很勇敢,这里有人为导入Csv编写了代理脚本:,但我自己没有测试过。我之所以提到它,是因为如果它经常出现,它看起来是处理这个问题的一个好方法

我发现这篇关于如何处理一些问题的文章很有帮助

#TYPE System.String
"Name"
"Peter"
"Jennifer"
#TYPE System.Double
"UserID";"Salary"
"1";"1200.03"
"2";"1000.50"
PS C:\> Import-Csv .\double.csv -Delimiter ';'
UserID Salary
------ ------
1      1200.03
2      1000.50
PS C:\> Import-Csv .\double.csv -Delimiter ';' | GM
TypeName: CSV:System.Double