gpt4 book ai didi

c# - Powershell 中的 DataTable.Rows.Find(MultiplePrimaryKey)

转载 作者:行者123 更新时间:2023-12-03 22:59:06 24 4
gpt4 key购买 nike

我正在使用 SQL Server 表,我将作为数据表进行一些修改并将数据保存回数据库。

我现在陷入了寻找 DataTable.Rows.Find(PrimaryKey) 的正确语法的困境

为了简单起见,我创建了一个包含一些数据的简单数据表你也可以在你的一端进行测试。

这是我的语法。

[System.Data.DataTable]$dtGL = New-Object System.Data.DataTable("GL")
#Schemas
$dtGL.Columns.Add("Account", "String") | Out-Null
$dtGL.Columns.Add("Property", "String") | Out-Null
$dtGL.Columns.Add("Date", "DateTime") | Out-Null
$dtGL.Columns.Add("Amount", "Decimal") | Out-Null

[System.Data.DataColumn[]]$KeyColumn = ($dtGL.Columns["Account"],$dtGL.Columns["Property"],$dtGL.Columns["Date"])
$dtGL.PrimaryKey = $KeyColumn

#Records
$dtGL.Rows.Add('00001','1000','1/1/2018','185') | Out-Null
$dtGL.Rows.Add('00001','1000','1/2/2018','486') | Out-Null
$dtGL.Rows.Add('00001','1001','1/1/2018','694') | Out-Null
$dtGL.Rows.Add('00001', '1001', '1/2/2018', '259') | Out-Null

[String[]]$KeyToFind = '00001', '1001', '01/01/2018'
$FoundRows = $dtGL.Rows.Find($KeyToFind)
$FoundRows | Out-GridView

我收到以下错误

Exception calling "Find" with "1" argument(s): "Expecting 3 value(s) for the key being indexed, but received 1 value(s)."
At C:\Users\MyUserName\OneDrive - MyUserName\MyCompany\PowerShell\Samples\Working With DataTable.ps1:32 char:5
+ $FoundRows = $dtGL.Rows.Find($KeyToFind)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentException

我也尝试过分离参数

$P01 = '00001'
$P02 = '1001'
$P03 = '01/01/2018'

$FoundRows = $dtGL.Rows.Find($P01,$P02,$P03)

这是错误

Cannot find an overload for "Find" and the argument count: "3".
+ $FoundRows = $dtGL.Rows.Find($P01,$P02,$P03)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest

最佳答案

DataRowCollection.Find需要一个对象数组。在编辑之前,您显示您正在传递一个字符串数组。如果每个主键列都是字符串类型,则这将起作用。由于您有一个 DateTime,因此您需要传递一个对象数组,并且 Date 列的值应该是 DateTime 类型。

尝试将 KeyToFind 的实现方式更改为对象数组,并在此过程中转换每种不同的类型:

[Object[]]$KeyToFind = [String]'00001', [String]'1001', [DateTime]'01/01/2018'

关于c# - Powershell 中的 DataTable.Rows.Find(MultiplePrimaryKey),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50726889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com