Sql server SQL Server:ExecuteReader不';t型投掷错误
我运行了下面的代码,基本上应该只对我的数据库执行SQL语句,如果有任何错误,脚本应该喊“error!” 运行脚本时,Sql server SQL Server:ExecuteReader不';t型投掷错误,sql-server,powershell,Sql Server,Powershell,我运行了下面的代码,基本上应该只对我的数据库执行SQL语句,如果有任何错误,脚本应该喊“error!” 运行脚本时,test.SQL文件中的SQL语句无效,异常被CATCH子句正确捕获,并写入“ERROR!” Test.sql文件如下所示: SELECT * FRRRROM [dbo].[testtable] 但是,当我向test.sql文件添加注释时,它不再抛出“ERROR!”消息 Test.sql文件现在如下所示: -- my comment SELECT * FRRRROM [dbo].
test.SQL
文件中的SQL语句无效,异常被CATCH
子句正确捕获,并写入“ERROR!”
Test.sql
文件如下所示:
SELECT * FRRRROM [dbo].[testtable]
但是,当我向test.sql
文件添加注释时,它不再抛出“ERROR!”消息
Test.sql
文件现在如下所示:
-- my comment
SELECT * FRRRROM [dbo].[testtable]
我不明白为什么。有什么建议吗
$Connection = New-Object System.Data.SQLClient.SQLConnection
$Connection.ConnectionString = "server='myServer';database='myDatabase';trusted_connection=true;MultipleActiveResultSets=True;"
$Connection.Open()
$Command = New-Object System.Data.SQLClient.SQLCommand
$Command.Connection = $Connection
$sql = Get-Content 'C:\Test\test.sql'
$Command.CommandText = $sql
Try
{
$Reader = $Command.ExecuteReader()
}
Catch
{
echo 'ERROR!!!!'
Exit
}
$Connection.Close()
我仍然认为会出现错误,但第一个和第二个示例之间的主要区别是您有另一行代码<代码>获取内容返回字符串数组。只要有一行,它就会被看作一根弦。确保这一点的简单方法是将文本转换为一个全新的行分隔字符串
$sql = Get-Content 'C:\Test\test.sql' | Out-String
您可以使用-join或类似的东西,但我发现
Out String
非常简单,并且与所有版本的PowerShell兼容 如用户Matt所述:
代码将数组返回给变量$sql
$sql = Get-Content 'C:\Test\test.sql'
$Command.CommandText = $sql
添加| Out String
后,它正常工作,返回字符串
$Command.CommandText = Get-Content 'C:\Test\test.sql'| Out-String
请尝试
$sql=Get Content'C:\Test\Test.sql'| Out String
然后您会收到错误吗?在第二个示例中,$sql
的不同之处在于数组,而不仅仅是换行符分隔的字符串。非常感谢!解决了这个问题。我不知道我的示例返回了一个数组!又来了!你让我开心!再次感谢!附加问题:确定错误的最佳方法是什么?读取执行的SQL代码。对不起,我对这方面还不太熟悉topic@EstebanP. 在捕获内容中,您可以查看包含捕获的异常消息的$error[0].Exception
。但可能是模糊的。这取决于System.Data.SQLClient.SQLCommand
愿意解释什么