【问题标题】:Powershell DateTime to SQL DateTime [duplicate]Powershell DateTime 到 SQL DateTime [重复]
【发布时间】:2020-01-29 21:07:08
【问题描述】:

我有一个 PowerShell 脚本,它从注册表中读取日期,然后在 SQL 查询中使用它

# get date from registry
$avdate = (readregistry -regpath "HKLM:\SOFTWARE\MCAFEE\agent" -targetval "InstallTime") -as [DateTime]
$avdate = $avdate.tostring("yyyy-MM-dd HH:mm:ss")

# query, ExecQuery() makes calls to the database, EscapeQuote() is for string formatting
$returnRS = ExecQuery("exec SystemCheckerVBS_UpdateComputer '" + (EscapeQuote($serialNumber)) + "','" + (EscapeQuote($computerName)) + "',3,'$hostip','$hostmac','$avdate','$ostype','$osbit','$spver','$sdc'")

#query function
function local:ExecQuery($sqlStr){
        #write-host "query: $sqlstr" #debug
    $SqlCmd.CommandText = $sqlStr
    $SqlAdapter.SelectCommand = $SqlCmd 
    $dataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    return $dataSet
}

在运行它产生的查询时(使用“1”参数调用“Fill”的异常:“将数据类型 varchar 转换为 datetime 时出错。”)。使用“yyyMMdd”格式也不起作用,也不能直接将其作为日期时间对象传递。 这里是 SQL 过程接收数据的地方,只有过程中的其他用途被传递到插入和更新语句中而无需更改。没有其他变量是或处理日期时间。

@I_AntiVirusDate datetime = '2001-01-01 00:00:01'

这是格式问题、语法问题还是其他原因?

【问题讨论】:

  • 嗨。这是需要Minimal, Reproducible Example 回答的问题类型。从您现有的帖子中,我们不知道注册表中的数据是什么样的,或者被调用的存储过程是做什么的。请编辑您的问题以包含相关详细信息,以便我们可以重现问题并帮助您确定原因。谢谢。
  • 另外,我会指出,通过将参数嵌入字符串中,您的代码很容易受到 SQL 注入攻击。您应该将它们作为实际参数添加到 $SqlAdapter.Parameters 上。见bobby-tables.com

标签: sql sql-server powershell datetime


【解决方案1】:

您可能想要使用这三种格式之一

'2001-01-01T00:00:01'
CAST('2001-01-01 00:00:01' AS DateTime)
'2001-01-01'

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2017-08-26
    • 1970-01-01
    • 2019-06-24
    • 2015-12-19
    • 2012-05-22
    相关资源
    最近更新 更多