Exemplo n.º 1
0
        /// <summary>
        /// Обновление данных из citect в указанной таблице согласно биндлиста
        /// </summary>
        /// <param name="connectId">Идентификатор соединения</param>
        /// <param name="xpathbind">xpath-запрос до биндлиста</param>
        /// <param name="xdoc">Имя Xml-файла с полным путем</param>
        /// <param name="suff">Суффикс, добавляемый к названию тэга или объекта</param>
        /// <param name="sztable">Имя таблицы <remarks>Если пустая строка, то берем из биндлиста</remarks></param>
        /// <returns>Код возврата (=0 - good, другие - неудача)</returns>
        /// <remarks>Идентификатор connectId был получен oconnect()</remarks>
        public int oupdate(int connectId, string xpathbind, string xdoc, int suff = 0, string sztable = "")
        {
            int  rc     = (int)constants.err.e_fault;
            uint cihndl = 0;
            var  _table = sztable;

            try {
                if (xdoc != "")
                {
                    bool          _fCi   = false;
                    string        _ask   = "UPDATE {0} set {1} WHERE {2}";
                    StringBuilder _vals  = new StringBuilder();
                    StringBuilder _where = new StringBuilder();

                    var x = new XmlDocument();
                    x.Load(xdoc);
                    var xn = x.SelectSingleNode(xpathbind);

                    if (_table.Length == 0)
                    {
                        _table = xn.Attributes.GetNamedItem("table").Value;
                    }

                    cihndl = CTAPI.ctOpen("", "", "", CTAPI.CT_OPEN_BATCH);
                    foreach (XmlNode it in xn.ChildNodes)
                    {
                        string _var = it.Attributes.Item(0).Value.Trim();
                        string _apo = _removeApo(ref _var);
                        _var = _addSuffix(_var, suff);
                        string        _col = it.Attributes.Item(1).Value.Trim();
                        StringBuilder pval = new StringBuilder(256);
                        _fCi |= CTAPI.ctTagRead(cihndl, _var, pval, 128);
                        if (it.Name.ToLower().Trim() == "item")
                        {
                            _vals.AppendFormat("{0} = {1}{2}{1}, ", _col, _apo, pval.ToString());
                        }
                        else if (it.Name.ToLower().Trim() == "where")
                        {
                            _where.Remove(0, _where.Length); _where.AppendFormat("{0} = {1}", _col, pval.ToString());
                        }
                    }
                    _vals = _vals.Remove(_vals.ToString().LastIndexOf(','), _vals.Length - _vals.ToString().LastIndexOf(','));
                    string mess = string.Format("Citect variables readed {0}", (_fCi ? "successfully" : "unsuccessfully"));
                    if (!_fCi)
                    {
                        logerr(mess);
                    }
                    //else if ((fLog & 1) != 0) log(mess);
                    _ask = String.Format(_ask, _table, _vals.ToString(), _where.ToString());
                    rc   = oexecute(connectId, _ask, "");
                }
            }
            catch (Exception e) {
                logerr("Ошибка обновления данных биндлиста {B} в таблице {T} подключения #{CONID} - {eName}: {e:Desc}", xpathbind, _table, connectId, e.GetType().Name, e.Message);
            }
            finally {
                CTAPI.ctClose(cihndl);
            }
            return(rc);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Вставка новых данных из citect в указанную таблицу согласно биндлиста
        /// </summary>
        /// <param name="connectId">Идентификатор соединения</param>
        /// <param name="xpathbind">xpath-запрос до биндлиста</param>
        /// <param name="xdoc">Имя Xml-файла с полным путем</param>
        /// <param name="suff">Суффикс, добавляемый к названию тэга или объекта</param>
        /// <param name="sztable">Имя таблицы <remarks>Если пустая строка, то берем из биндлиста</remarks></param>
        /// <returns>Код возврата (=0 - good, другие - неудача)</returns>
        /// <remarks>Идентификатор connectId был получен oconnect()</remarks>
        public int oinsert(int connectId, string xpathbind, string xdoc, int suff = 0, string sztable = "")
        {
            int  rc     = (int)constants.err.e_fault;
            uint cihndl = 0;
            var  _table = sztable;

            try {
                if (xdoc != "")
                {
                    bool _fCi = false;
                    cihndl = CTAPI.ctOpen("", "", "", CTAPI.CT_OPEN_BATCH);
                    string        _ask  = "INSERT INTO {0} ({1}) VALUES ({2})";
                    StringBuilder _cols = new StringBuilder();
                    StringBuilder _vals = new StringBuilder();

                    var x = new XmlDocument();
                    x.Load(xdoc);
                    var xn = x.SelectSingleNode(xpathbind);

                    if (_table.Length == 0)
                    {
                        _table = xn.Attributes.GetNamedItem("table").Value;
                    }

                    foreach (XmlNode it in xn.ChildNodes)
                    {
                        string _var = it.Attributes.Item(0).Value.Trim();
                        string _apo = _removeApo(ref _var);
                        _var = _addSuffix(_var, suff);
                        string        _col = it.Attributes.Item(1).Value.Trim();
                        StringBuilder pval = new StringBuilder(256);
                        _fCi |= CTAPI.ctTagRead(cihndl, _var, pval, 128);
                        _cols.AppendFormat("{0}, ", _col);
                        _vals.AppendFormat("{0}{1}{0}, ", _apo, pval.ToString());
                    }
                    _vals = _vals.Remove(_vals.ToString().LastIndexOf(','), _vals.Length - _vals.ToString().LastIndexOf(','));
                    _cols = _cols.Remove(_cols.ToString().LastIndexOf(','), _cols.Length - _cols.ToString().LastIndexOf(','));
                    string mess = string.Format("Citect variables readed {0}", (_fCi ? "successfully" : "unsuccessfully"));
                    if (!_fCi)
                    {
                        logerr(mess);
                    }
                    //else if ((fLog & 1) != 0) log(mess);

                    _ask = String.Format(_ask, _table, _cols.ToString(), _vals.ToString());
                    rc   = oexecute(connectId, _ask, "");
                }
            }
            catch (Exception e) {
                logerr("Ошибка вставки данных биндлиста {B} в таблицу {T} подключения #{CONID} - {eName}: {e:Desc}", xpathbind, _table, connectId, e.GetType().Name, e.Message);
            }
            finally {
//                Marshal.FreeCoTaskMem(pval);
//                ciInterop.ctClose(cihndl);
                CTAPI.ctClose(cihndl);
            }
            return(rc);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Получение строки данных из выборки и запись в тэги Citect
        /// </summary>
        /// <param name="stmtId">Идентификатор запроса</param>
        /// <param name="recOff">Номер выбираемой записи</param>
        /// <param name="suff">Суффикс, добавляемый к имени тэга или объекта</param>
        /// <returns>Код возврата (=0 - good, другие - неудача)</returns>
        /// <remarks>Идентификатор stmtId был получен osetstatement()</remarks>
        public int ogetrecord(int stmtId, int recOff = 0, int suff = 0)
        {
            int  rc     = (int)constants.err.e_fault;
            uint cihndl = 0;

            try {
                var _st = m_ost.First(m => m._id == stmtId);
                if (_st._dt.Rows.Count != 0)
                {
                    bool _fCi = false;
                    cihndl = CTAPI.ctOpen("", "", "", CTAPI.CT_OPEN_BATCH);
                    StringBuilder _vars = new StringBuilder();
                    StringBuilder _cols = new StringBuilder();
                    StringBuilder _out  = new StringBuilder();
                    string        _sfmt = "|{0,-15}";
                    foreach (var col in _st._binds)
                    {
                        string _var = _addSuffix((string)col._tkey, suff);
                        _vars.AppendFormat(_sfmt, _var);
                        _cols.AppendFormat(_sfmt, (string)col._tvalue);
                        string _val = _st._dt.Rows[recOff][col._tvalue].ToString();
//                        _val = _val.Replace(',', '.');
                        _fCi |= CTAPI.ctTagWrite(cihndl, _var, _val);
                        _out.AppendFormat(_sfmt, _val);
                    }
                    if ((fLog & 1) != 0 || _st._log)
                    {
                        log("{variables}", _vars);
                        log("{columns}", _cols);
                        log("{values}", _out);
                    }
                    string mess = string.Format("Citect variables writed {0}", (_fCi ? "successfully" : "unsuccessfully"));
                    if (!_fCi)
                    {
                        logerr(mess);
                    }
                    //else if ((fLog & 1) != 0) log(mess);
                    rc = (_fCi) ? (int)constants.err.s_ok : (int)constants.err.e_noitems;
                }
            }
            catch (OracleException e) {
                logerr("Ошибка выборки записи '{A}' запроса {B} - {eName}: {e:Desc}", recOff, stmtId, e.GetType().Name, e.Message);
            }
            catch (Exception e) {
                logerr("Ошибка выборки записи '{A}' запроса {B} - {eName}: {e:Desc}", recOff, stmtId, e.GetType().Name, e.Message);
            }
            finally {
                CTAPI.ctClose(cihndl);
            }

            return(rc);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Получение набора строк данных из выборки и запись в тэги Citect
        /// </summary>
        /// <param name="stmtId">Идентификатор запроса</param>
        /// <param name="recOff">Номер первой выбираемой записи</param>
        /// <param name="recOffLast">Номер последней выбираемой записи</param>
        /// <returns>Код возврата (=0 - good, другие - неудача)</returns>
        /// <remarks>Идентификатор stmtId был получен osetstatement()</remarks>
        public int ogetrecordset(int stmtId, int recOff = 1, int recOffLast = 0)
        {
            int  rc     = (int)constants.err.e_fault;
            uint cihndl = 0;

//            CTOVERLAPPED lpOv = new CTOVERLAPPED();

            try
            {
                var _st = m_ost.First(m => m._id == stmtId);
                if (_st._dt.Rows.Count != 0)
                {
                    bool _fCi = false;
                    cihndl = CTAPI.ctOpen("", "", "", CTAPI.CT_OPEN_BATCH);
                    StringBuilder _vars = new StringBuilder();
                    StringBuilder _cols = new StringBuilder();
                    StringBuilder _out  = new StringBuilder();
//                    StringBuilder _wr = new StringBuilder();
//                    StringBuilder _res = new StringBuilder();
                    string _sfmt = "|{0,-15}";
                    for (int nrow = recOff; nrow > 0 && nrow <= recOffLast; nrow++)
                    {
                        _vars.Clear();
                        _cols.Clear();
                        _out.Clear();
                        foreach (var col in _st._binds)
                        {
                            string _var = _addSuffix((string)col._tkey, nrow);
                            _vars.AppendFormat(_sfmt, _var);
                            _cols.AppendFormat(_sfmt, (string)col._tvalue);
                            string _val = _st._dt.Rows[nrow - 1][col._tvalue].ToString();
//                            _wr.Clear();
//                            _wr.AppendFormat("TagWrite(\"{0}\", \"{1}\"", _var, _val);
//                            CTAPI.ctCicode(cihndl, _wr.ToString(), 0, 0, _res, 0, IntPtr.Zero);
                            _fCi |= CTAPI.ctTagWrite(cihndl, _var, _val);
                            _out.AppendFormat(_sfmt, _val);
                        }
                        if (nrow == recOff)
                        {
                            log("{columns}", _cols.ToString());
                        }
                        log("{variables}", _vars.ToString());
                        log("{values}", _out.ToString());
                    }
                    string mess = string.Format("Citect variables writed {0}", (_fCi ? "successfully" : "unsuccessfully"));
                    if (!_fCi)
                    {
                        logerr(mess);
                    }
                    else if ((fLog & 1) != 0)
                    {
                        log(mess);
                    }
                    rc = (_fCi) ? (int)constants.err.s_ok : (int)constants.err.e_noitems;
                }
            }
            catch (OracleException e)
            {
                logerr("Ошибка выборки записи '{A}' запроса {B} - {eName}: {e:Desc}", recOff, stmtId, e.GetType().Name, e.Message);
            }
            catch (Exception e)
            {
                logerr("Ошибка выборки записи '{A}' запроса {B} - {eName}: {e:Desc}", recOff, stmtId, e.GetType().Name, e.Message);
            }
            finally
            {
                CTAPI.ctClose(cihndl);
            }

            return(rc);
        }        /// <summary>