例外をスローし続ける従来のメソッドがあります。ネストされた try|catch があります。これは、そのようなことをコーディングするための最良の方法ですか:
public void DBCommand(string dynSQL, bool Silent)
{
checkConnection(); //Despite the name, this "returns" void, not bool
SqlCeCommand cmd = objCon.CreateCommand();
SqlCeTransaction trans = GetConnection().BeginTransaction();
cmd.Transaction = trans;
try
{
cmd.CommandText = dynSQL;
cmd.ExecuteNonQuery();
trans.Commit();
}
catch (Exception ex)
{
try
{
trans.Rollback();
}
catch (SqlCeException sqlceex)
{
MessageBox.Show(string.Format("SqlCeException ({0})", sqlceex.Message));
CCR.LogMsgs.Append(string.Format("SqlCeException exception: {0}\r\n", sqlceex.Message));
// Handle possible Rollback exception here
}
MessageBox.Show(string.Format("DBCommand Except ({0})", ex.Message));
CCR.LogMsgs.Append(string.Format("DBCommand exception: {0}\r\n", ex.Message));
}
}
?
これをリファクタリングして、少なくとも SqlCeCommand の using ステートメントを使用したいのですが、今のところ、上記は「現状のまま」のコードです。一般的な例外メッセージ ("DBCommand Except") が表示されますが、"SqlCeException" は表示されません。
アップデート
MessageBox.Show() コールバックをいくつか追加することで (何らかの理由でデバッグ ログ ファイルが書き込まれなくなりました)、これが例外をスローする DDL であることがわかりました。
ALTER TABLE CCR032713190114 ADD salvationId nvarchar(19), salvation float
注: 「CCR032713190114」は、コードのこの時点で有効なテーブル名 (存在する) であることが証明されています。
この DDL に問題を引き起こす何か問題がありますか?
更新 2
私はこれからコードを変更しました:
ddl = string.Format("ALTER TABLE {0} ADD salvationID nvarchar(19) ", tablename);
dbconn.DBCommand(ddl,false);
ddl = string.Format("UPDATE {0} SET salvationID = {1}", tablename, string.Empty);
...これに:
ddl = string.Format("ALTER TABLE {0} ADD salvationID nvarchar(19) NOT NULL WITH DEFAULT", tablename);
dbconn.DBCommand(ddl,false);
...しかし、今、「ALTER TABLE BLA ADD salvation float NOT NULL WITH DEFAULT」の直後に、「DBCommand Except (クエリの解析中にエラーが発生しました。[トークン行番号、トークン行オフセット、、トークンにエラーがあります,,]) "
Azure braziers で何が起こっているのでしょうか?
「WITH DEFAULT」の後にデフォルトの val を指定する必要がありますか?