SQL Server:ExecuteReader不会抛出错误

时间:2015-10-07 14:49:46

标签: sql-server powershell

我运行了以下代码,基本上只应对我的数据库执行一条SQL语句,如果有任何错误,脚本应该大喊“错误!"

当我运行脚本时,test.sql文件中的SQL语句无效,CATCH子句和" ERROR正确捕获了异常!"是写的。

Test.sql文件如下所示:

SELECT * FRRRROM [dbo].[testtable]

但是,当我在test.sql文件中添加评论时,它不再抛出" ERROR!" -message。

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()

2 个答案:

答案 0 :(得分:2)

我仍然会预料到错误,但你的第一个和第二个例子之间的主要区别是你有另一条线。 @Override public void onResponse(Response response) throws IOException { try { String jsonData = response.body().string(); Log.v(TAG, jsonData); if (response.isSuccessful()) { final String transportationValue = getTransportationValue(jsonData); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(BubblesActivity.this, transportationValue, Toast.LENGTH_SHORT).show(); updateDisplay(transportationValue); } }); } else { alertUserAboutError(); } } catch (IOException e) { Log.e(TAG, "Exception caught: ", e); } catch (JSONException e) { e.printStackTrace(); } } } private String getTransportationValue(String jsonData) throws JSONException { JSONObject response = new JSONObject(jsonData); String status = response.getString("status"); int counter = 0; if (status.equals("OK")) { // It returned a good result. Keep going... JSONArray routes = response.getJSONArray("routes"); for (int i = 0; i < routes.length(); i++) { JSONObject currentRoute = routes.getJSONObject(i); JSONArray legs = currentRoute.getJSONArray("legs"); for (int j = 0; j < legs.length(); j++) { JSONObject currentLeg = legs.getJSONObject(i); JSONObject duration = currentLeg.getJSONObject("duration"); counter += duration.getInt("value"); } } } else { return "No"; } return counter + ""; } private void updateDisplay(String data) { mTransportValue.setText(data); } 返回一个字符串 array 。只有一行它就会被视为一个字符串。确保这一点的简单方法是将文本转换为一个全新的行分隔字符串。

Get-Content

您可以使用-join或其他类似的东西,但我发现$sql = Get-Content 'C:\Test\test.sql' | Out-String 非常简单并且与所有版本的PowerShell兼容。

答案 1 :(得分:0)

正如用户Matt所说:

代码将数组返回给变量$sql

$sql = Get-Content 'C:\Test\test.sql'
$Command.CommandText = $sql

添加| Out-String后,它正常工作,返回一个字符串

$Command.CommandText = Get-Content 'C:\Test\test.sql'| Out-String