public void PersistenceFL(FLInstance flInstance, object[] clientInfo) { //string sql = sql1 + ";\n" + sql2; string sql1 = string.Format(DELETE_FLINSTANCESTATE, flInstance.FLInstanceId); String param = ""; String DBAlias = (clientInfo[0] as object[])[2].ToString(); EEPRemoteModule remoteModule = new EEPRemoteModule(); object[] myRet = remoteModule.CallMethod(clientInfo, "GLModule", "GetDataBaseType", new object[] { DBAlias }); if (myRet != null && myRet[0].ToString() == "0") { switch (myRet[1].ToString()) { case "1": param = "@State"; break; case "2": param = "?"; break; case "3": param = ":State"; break; case "4": param = "?"; break; case "5": param = "@State"; break; case "6": param = "?"; break; } } String strSet = "SET TEXTSIZE 70000 "; String str = "INSERT INTO SYS_FLINSTANCESTATE(FLINSTANCEID,STATE,STATUS) VALUES('{0}'," + param + ",{1})"; string sql2 = string.Format(str, flInstance.FLInstanceId, 0); MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, flInstance); object o = clientInfo[0]; object[] os = (object[])o; string dbAlias = os[2].ToString(); DbConnectionType dbConnectionType = DbConnectionType.SqlClient; string connString = GetConnectionString(dbAlias, out dbConnectionType, true); IDbConnection conn = AllocateConnection(dbAlias, true); //IDbConnection conn = AllocateConnection(dbConnectionType, connString); IDbCommand command = AllocateCommand(conn, sql1); command.ExecuteNonQuery(); conn.Close(); if (myRet[1].ToString() == "2") { conn.Open(); command.CommandText = strSet; command.ExecuteNonQuery(); } command.CommandText = sql2; IDataParameter state = AllocateParameter(command, param, DbType.Binary); if (myRet[1].ToString() == "2") { (state as OleDbParameter).OleDbType = OleDbType.LongVarBinary; } state.Value = stream.GetBuffer(); command.Parameters.Add(state); if (conn.State != ConnectionState.Open) conn.Open(); command.ExecuteNonQuery(); conn.Close(); }
public void PersistenceFL(FLInstance flInstance, object[] clientInfo) { //string sql = sql1 + ";\n" + sql2; string sql1 = string.Format(DELETE_FLINSTANCESTATE, flInstance.FLInstanceId); String param = ""; String DBAlias = (clientInfo[0] as object[])[2].ToString(); EEPRemoteModule remoteModule = new EEPRemoteModule(); object[] xx = remoteModule.CallMethod(clientInfo, "GLModule", "GetSplitSysDB2", new object[] { DBAlias }); if (xx[0].ToString() == "0") DBAlias = xx[1].ToString(); //object[] myRet = remoteModule.CallMethod(clientInfo, "GLModule", "GetDataBaseType", new object[] { DBAlias }); IDbConnection conn1 = AllocateWorkFlowConnection(DBAlias, clientInfo); if (conn1.GetType().Name == "SqlConnection") param = "@State"; else if (conn1.GetType().Name == "OleDbConnection") param = "?"; else if (conn1.GetType().Name == "OracleConnection") param = ":State"; else if (conn1.GetType().Name == "OdbcConnection") param = "?"; else if (conn1.GetType().Name == "MySqlConnection") param = "@State"; else if (conn1.GetType().Name == "Ifxonnection") param = "?"; String strSet = "SET TEXTSIZE 70000 "; String str = "INSERT INTO SYS_FLINSTANCESTATE(FLINSTANCEID,STATE,STATUS) VALUES('{0}'," + param + ",{1})"; string sql2 = string.Format(str, flInstance.FLInstanceId, 0); MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, flInstance); object o = clientInfo[0]; object[] os = (object[])o; string dbAlias = os[2].ToString(); //DbConnectionType dbConnectionType = DbConnectionType.SqlClient; //string connString = GetConnectionString(dbAlias, out dbConnectionType, true); if (IsWorkFlowTransactionEnabled(clientInfo)) { IDbConnection conn = AllocateWorkFlowConnection(DBAlias, clientInfo); IDbCommand command = AllocateCommand(conn, sql1); command.Transaction = GetWorkFlowTransaction(DBAlias, clientInfo); command.ExecuteNonQuery(); if (conn1.GetType().Name == "OleDbConnection") { conn.Open(); command.CommandText = strSet; command.ExecuteNonQuery(); } command.CommandText = sql2; IDataParameter state = AllocateParameter(command, param, DbType.Binary); if (conn1.GetType().Name == "OleDbConnection") { (state as OleDbParameter).OleDbType = OleDbType.LongVarBinary; } state.Value = stream.GetBuffer(); command.Parameters.Add(state); command.ExecuteNonQuery(); } else { var workFlowTransmitterPropagationToken = WorkFlowTransmitterPropagationToken(clientInfo); if (workFlowTransmitterPropagationToken != null) { using (System.Transactions.TransactionScope ts = new System.Transactions.TransactionScope(System.Transactions.TransactionInterop.GetTransactionFromTransmitterPropagationToken(workFlowTransmitterPropagationToken))) { using (IDbConnection conn = AllocateConnection(dbAlias, true, clientInfo)) { IDbCommand command = AllocateCommand(conn, sql1); command.ExecuteNonQuery(); if (conn1.GetType().Name == "OleDbConnection") { conn.Open(); command.CommandText = strSet; command.ExecuteNonQuery(); } command.CommandText = sql2; IDataParameter state = AllocateParameter(command, param, DbType.Binary); if (conn1.GetType().Name == "OleDbConnection") { (state as OleDbParameter).OleDbType = OleDbType.LongVarBinary; } state.Value = stream.GetBuffer(); command.Parameters.Add(state); command.ExecuteNonQuery(); ts.Complete(); } } } else { using (IDbConnection conn = AllocateConnection(dbAlias, true, clientInfo)) { IDbCommand command = AllocateCommand(conn, sql1); command.ExecuteNonQuery(); if (conn1.GetType().Name == "OleDbConnection") { conn.Open(); command.CommandText = strSet; command.ExecuteNonQuery(); } command.CommandText = sql2; IDataParameter state = AllocateParameter(command, param, DbType.Binary); if (conn1.GetType().Name == "OleDbConnection") { (state as OleDbParameter).OleDbType = OleDbType.LongVarBinary; } state.Value = stream.GetBuffer(); command.Parameters.Add(state); command.ExecuteNonQuery(); } } } }