繁体   English   中英

无法将“System.DBNull”类型的对象强制转换为“System.Type”

[英]Unable to cast object of type 'System.DBNull' to type 'System.Type'

我有一个 PowerShell 脚本尝试使用Invoke-Sqlcmd运行 sql 命令,但出现以下异常:

Invoke-Sqlcmd : The pipeline has been stopped.
At D:\Scripts\powersehelscript.ps1:57 char:9
+ $rows = Invoke-Sqlcmd -Query "SELECT * from TableName where location is  null;"  ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], PipelineStoppedException
+ FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptComman
 Invoke-Sqlcmd : Unable to cast object of type 'System.DBNull' to type
'System.Type'.
At D:\Scripts\MyScript.ps1:57 char:9
+ $rows = Invoke-Sqlcmd -Query "SELECT * from TableName where location is null;"  ...

我的 sql 命令如下所示:

$rows = Invoke-Sqlcmd -Query "SELECT * from TableName where location is null;" -Database $Database -ServerInstance $SqlServer -Username $U -Password $P

它似乎可以很好地连接到数据库,如果我直接在数据库中运行相同的查询,我会得到结果。

从异常中,我看到“无法将类型为 'System.DBNull' 的对象强制转换为类型”,但我不知道为什么会发生此强制转换问题

万一阅读这篇文章的人正在寻找其他结论,我遇到了完全相同的 PowerShell 相同错误问题,并将其归结为单个地理列。 我只是编写了一些代码来抓取表格并每周导出一次以方便用户参考。 Add-Type 解决方案没有改变我的结果。 对我有用的是,在 SQL cmd 中,使用 CAST(mygeocol AS varchar(100))。 方便的是,在 SQL 和 PS 中,这将其恢复为“POINT (-90.1234 30.1234)”之类的格式并且效果很好。 希望它可以帮助某人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM