處理說明: 1> SQLStringList_A.Add(Tmp_Sql);
2> excuteSQLTran(SQLStringList_A);
2> excuteSQLTran(SQLStringList_A);
--> 執行 SQLStringList_A 內的 SQL
若不成功,則自動 Rollback
3>若呼叫executeSqlTran()的API函式名稱太長,
// Transaction SQL List - 存放 Transaction 的 SQL
List<string> SQLStringList_A = new List<string>();
Tmp_Sql = " DELETE AMM_AR "
+ " WHERE FMNO=" + myfunc.AA(Tmp_FMNO);
SQLStringList_A.Add(Tmp_Sql);
Tmp_Sql = " UPDATE AMM_AR "
+" SET RQHR=" + myfunc.AA(Tmp_PR04AR)
+ " WHERE FMNO = " + myfunc.AA(Tmp_FMNO)
+ " AND AMINO=" + myfunc.AA("0400");
SQLStringList_A.Add(Tmp_Sql);
excuteSQLTran(SQLStringList_A);
2>BaseAPIController.cs
public int excuteSQLTran(List<string> SQLStringList, bool sysException = true)
{
setActionName();
int rows = 0;
OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));
conn.Open();
conn.ClientInfo = User.Identity.Name;
conn.ModuleName = BaseSYS + "_" + BaseMODID;
conn.ActionName = ActionName; //ActionName=API函式名稱 ,不可太長,否則會Error
OracleTransaction trn = conn.BeginTransaction();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.Transaction = trn;
try
{
excMsg = "";
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n].ToString();
cmd.CommandText = strsql;
//rows += cmd.ExecuteNonQuery();
cmd.ExecuteNonQuery();
rows = 1;
}
trn.Commit();
}
catch (Exception ex)
{
trn.Rollback();
rows = -1;
//Console.WriteLine("error : " + ex.Message);
excMsg = ex.Message;
if (sysException)
{
throw ex; //如果沒有另外寫例外訊息的話,以此為主
}
}
finally
{
cmd.Cancel();
conn.Close();
}
return rows;
}
PS: API函式名稱不可太長,否則會出現錯誤訊息
沒有留言:
張貼留言