我运行了以下代码,基本上只应对我的数据库执行一条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()
答案 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