OLEDB 将 Oracle LONG 数据类型截断为 100 个字符
OLEDB truncating Oracle LONG datatype to 100 characters
我想我知道这个问题的解决方案,但我想征求第二意见。
我有一个名为 Get-Data 的函数,它从 Oracle 数据库中检索和 returns 一个 DataTable。现在,由于 Powershell 非常有用,当仅从 Oracle 返回一条记录时,函数 returns 一个 DataRow 而不是 DataTable。
发生这种情况并且其中一列是 LONG 数据类型时,该字段将被截断为 100 个字符。
显而易见的解决方案是 Return , $dt 并修改我的代码来处理它。但是,正如我所说,我想要第二个意见。
获取数据:
function Get-Data
{
[Cmdletbinding()]
Param
(
[Parameter(Position=0,Mandatory=$True)]$Conn,
[Parameter(Position=1,Mandatory=$True)]$sql
)
#Open the connection to the DB if closed
if($Conn.state -eq 'Closed')
{
$Conn.open()
}
#Create objects for querying the DB
$readcmd = New-Object system.Data.OleDb.OleDbCommand($sql,$Conn)
$readcmd.CommandTimeout = '300'
$da = New-Object system.Data.OleDb.OleDbDataAdapter($readcmd)
$dt = New-Object system.Data.datatable
#Query the DB and fill the DataTabe with records
[void]$da.fill($dt)
return $dt
}
好的,所以我找到了问题的根源。
当使用此 sql 语句从具有 LONG 数据类型的 table 到 select 时:
Select * from [table]
OLEDB returns 来自 ORACLE 的 LONG 字段的全部内容
当使用以下查询代替相同的查询时 table:
Select distinct * from [table]
OLEDB returns 仅 LONG 字段的前 100 个字符
我想我知道这个问题的解决方案,但我想征求第二意见。
我有一个名为 Get-Data 的函数,它从 Oracle 数据库中检索和 returns 一个 DataTable。现在,由于 Powershell 非常有用,当仅从 Oracle 返回一条记录时,函数 returns 一个 DataRow 而不是 DataTable。
发生这种情况并且其中一列是 LONG 数据类型时,该字段将被截断为 100 个字符。
显而易见的解决方案是 Return , $dt 并修改我的代码来处理它。但是,正如我所说,我想要第二个意见。
获取数据:
function Get-Data
{
[Cmdletbinding()]
Param
(
[Parameter(Position=0,Mandatory=$True)]$Conn,
[Parameter(Position=1,Mandatory=$True)]$sql
)
#Open the connection to the DB if closed
if($Conn.state -eq 'Closed')
{
$Conn.open()
}
#Create objects for querying the DB
$readcmd = New-Object system.Data.OleDb.OleDbCommand($sql,$Conn)
$readcmd.CommandTimeout = '300'
$da = New-Object system.Data.OleDb.OleDbDataAdapter($readcmd)
$dt = New-Object system.Data.datatable
#Query the DB and fill the DataTabe with records
[void]$da.fill($dt)
return $dt
}
好的,所以我找到了问题的根源。
当使用此 sql 语句从具有 LONG 数据类型的 table 到 select 时:
Select * from [table]
OLEDB returns 来自 ORACLE 的 LONG 字段的全部内容
当使用以下查询代替相同的查询时 table:
Select distinct * from [table]
OLEDB returns 仅 LONG 字段的前 100 个字符