我有一个System.Data.DataSet对象,该对象已被序列化,然后反序列化为PSObject。
我正在尝试访问从标题为Properties
的表的列中填充的属性。
虽然Get-Member
显示对象具有名为Properties
的属性,但是我可以使用select -ExpandProperties
来获取值,但是我不能作为对象的属性直接访问它。 / p>
更新:
实际的SQL查询在服务器上运行,结果使用Export-CliXml
进行序列化,并放置在可访问的共享中。使用Import-CliXml
将结果重新水化,这将导致对象类型以Deserialized
为前缀,如下面的Mötz所指出的。对此的解释可以在here中找到。
$> $res.Tables[0] | Get-Member
TypeName: Deserialized.System.Data.DataRow
Name MemberType Definition
---- ---------- ----------
GetType Method type GetType()
ToString Method string ToString(), string ToString(string format, System.IFormatProvider formatProvider), string IFormattable.ToString(string format, System.IFormatProvider formatProvider)
Properties Property System.String {get;set;}
$> $res.Tables[0].Properties
$> $res.Tables[0]."Properties"
$> $res.Tables[0] | select -ExpandProperty "Properties"
<object type= .... > .... </object>
答案 0 :(得分:1)
我们需要更多帮助我们。我们不知道您的数据源是什么样,表结构和其他重要细节。
我只是对一个数据库进行了快速采样,结果看起来有些不同。
$SqlConnection = new-object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "data source=.;Initial catalog=db;Trusted_Connection=True;"
$SqlCommand = $SqlConnection.CreateCommand()
$SqlCommand.CommandText = "SELECT * FROM dbo.Table"
$DataAdapter = new-object System.Data.SqlClient.SqlDataAdapter $SqlCommand
$dataset = new-object System.Data.Dataset
$DataAdapter.Fill($dataset)
您的类型说:“ Deserialized.System.Data.DataRow”,而我的话说“ System.Data.DataRow”。
PS C:\windows\system32> $dataset.Tables[0] | Get-Member
TypeName: System.Data.DataRow
Name MemberType Definition
---- ---------- ----------
AcceptChanges Method void AcceptChanges()
BeginEdit Method void BeginEdit()
CancelEdit Method void CancelEdit()
ClearErrors Method void ClearErrors()
Delete Method void Delete()
EndEdit Method void EndEdit()
Equals Method bool Equals(System.Object obj)
GetChildRows Method System.Data.DataRow[] GetChildRows(string relationName), System.Data...
GetColumnError Method string GetColumnError(int columnIndex), string GetColumnError(string...
GetColumnsInError Method System.Data.DataColumn[] GetColumnsInError()
GetHashCode Method int GetHashCode()
GetParentRow Method System.Data.DataRow GetParentRow(string relationName), System.Data.D...
GetParentRows Method System.Data.DataRow[] GetParentRows(string relationName), System.Dat...
GetType Method type GetType()
HasVersion Method bool HasVersion(System.Data.DataRowVersion version)
IsNull Method bool IsNull(int columnIndex), bool IsNull(string columnName), bool I...
RejectChanges Method void RejectChanges()
SetAdded Method void SetAdded()
SetColumnError Method void SetColumnError(int columnIndex, string error), void SetColumnEr...
SetModified Method void SetModified()
SetParentRow Method void SetParentRow(System.Data.DataRow parentRow), void SetParentRow(...
ToString Method string ToString()
Item ParameterizedProperty System.Object Item(int columnIndex) {get;set;}, System.Object Item(s...
ACCOUNTTYPE Property int ACCOUNTTYPE {get;set;}
AUTOINFO Property int AUTOINFO {get;set;}
AUTOLOGOFF Property int AUTOLOGOFF {get;set;}
AUTOUPDATE Property int AUTOUPDATE {get;set;}
CLIENTACCESSLOGLEVEL Property int CLIENTACCESSLOGLEVEL {get;set;}
COMPANY Property string COMPANY {get;set;}
COMPILERWARNINGLEVEL Property int COMPILERWARNINGLEVEL {get;set;}
CONFIRMDELETE Property int CONFIRMDELETE {get;set;}
CONFIRMUPDATE Property int CONFIRMUPDATE {get;set;}
CREDENTIALRECID Property long CREDENTIALRECID {get;set;}
DEBUGGERPOPUP Property int DEBUGGERPOPUP {get;set;}
... ... ...
因此,我可以使用的方法列表超出了您的列表。那是第一。接下来是我所有的属性都映射到表中的列。
所以我想您需要共享更多有关如何将数据填充到数据集对象中的代码,以便我们了解您所面临的情况。