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