//Удаление из оригинальной таблицы записей не существующих в измененной таблице (обязательно наличие поля: ID) public static void RecDelete(ref DbConnection conn, string nameTable, string keyFields, DataTable origin, DataTable data, out int err) { err = (int)Error.NO_ERROR; int j = -1; DataRow[] dataRows; string[] strQuery = new string[(int)DbTSQLInterface.QUERY_TYPE.COUNT_QUERY_TYPE]; string strWhere = string.Empty; for (j = 0; j < origin.Rows.Count; j++) { strWhere = getWhereSelect(keyFields, origin.Rows[j]); dataRows = data.Select(strWhere); if (dataRows.Length == 0) { //DELETE strQuery[(int)DbTSQLInterface.QUERY_TYPE.DELETE] = string.Empty; strQuery[(int)DbTSQLInterface.QUERY_TYPE.DELETE] = "DELETE FROM " + nameTable + " WHERE " + getWhereSelect(keyFields, origin.Rows[j]); DbTSQLInterface.ExecNonQuery(ref conn, strQuery[(int)DbTSQLInterface.QUERY_TYPE.DELETE], null, null, out err); } else { //Ничего удалять не надо if (dataRows.Length == 1) { } else { } } } }
//Удаление из оригинальной таблицы записей не существующих в измененной таблице (обязательно наличие поля: ID) public static void RecDelete(ref DbConnection conn, string nameTable, DataTable origin, DataTable data, out int err) { err = 0; int j = -1; DataRow[] dataRows; string[] strQuery = new string[(int)DbTSQLInterface.QUERY_TYPE.COUNT_QUERY_TYPE]; for (j = 0; j < origin.Rows.Count; j++) { dataRows = data.Select("ID=" + origin.Rows[j]["ID"]); if (dataRows.Length == 0) { //DELETE strQuery[(int)DbTSQLInterface.QUERY_TYPE.DELETE] = string.Empty; strQuery[(int)DbTSQLInterface.QUERY_TYPE.DELETE] = "DELETE FROM " + nameTable + " WHERE ID=" + origin.Rows[j]["ID"]; DbTSQLInterface.ExecNonQuery(ref conn, strQuery[(int)DbTSQLInterface.QUERY_TYPE.DELETE], null, null, out err); } else { //Ничего удалять не надо if (dataRows.Length == 1) { } else { } } } }
/// <summary> /// Функция добавления прав доступа для пользователя /// </summary> public static void SetAllowed(int iListenerId, int id, string val) { string query = string.Empty; int err = -1 , cntRows = -1; DbConnection dbConn = null; //Проверить наличие индивидуальной записи... cntRows = m_tblValues.Select(@"ID_UNIT=" + id).Length; switch (cntRows) { case 1: //Вставка записи... query = @"INSERT INTO " + m_nameTableProfilesData + @" ([ID_EXT],[IS_ROLE],[ID_UNIT],[VALUE]) VALUES (" + Id + @",0," + id + @",'" + val + @"')"; break; case 2: //Обновление записи... query = @"UPDATE " + m_nameTableProfilesData + @" SET [VALUE]='" + val + @"' WHERE ID_EXT=" + Id + @" AND IS_ROLE=0 AND ID_UNIT=" + id; break; default: //Ошибка - исключение throw new Exception(@"HUsers.HProfiles::SetAllowed (id=" + id + @") - не найдено ни одной записи..."); } dbConn = DbSources.Sources().GetConnection(iListenerId, out err); if ((!(dbConn == null)) && (err == 0)) { DbTSQLInterface.ExecNonQuery(ref dbConn, query, null, null, out err); //Проверить результат сохранения... if (err == 0) {//Обновить таблицу пользовательских настроек... switch (cntRows) { case 1: //Вставка записи... m_tblValues.Rows.Add(new object [] { Id, 0, id, val }); break; case 2: //Обновление записи... DataRow[] rows = m_tblValues.Select(@"ID_EXT=" + Id + @" AND IS_ROLE=0 AND ID_UNIT=" + id); rows[0][@"VALUE"] = val; break; default: //Ошибка - исключение //Ошибка обработана - создано исключение... break; } } else { ; } } else { ; } }
public bool SetPassword(string password, uint idExtPass, uint idRolePass) { int err = -1; passResult = Errors.NoError; m_idExtPass = idExtPass; m_idRolePass = idRolePass; byte[] hash = md5.ComputeHash(Encoding.ASCII.GetBytes(password)); StringBuilder hashedString = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { hashedString.Append(hash[i].ToString("x2")); } GetPassword(out err); if (!(passResult == Errors.NoError)) { //MessageBox.Show(this, "ќшибка получени¤ парол¤ " + getOwnerPass () + ". ѕароль не сохранЄн.", "ќшибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox("ќшибка получени¤ парол¤ " + getOwnerPass((int)m_idRolePass) + ". ѕароль не сохранЄн."); return(false); } else { ; } DbConnection conn = DbSources.Sources().GetConnection(m_idListener, out err); if (passReceive == null) { DbTSQLInterface.ExecNonQuery(ref conn, SetPassRequest(hashedString.ToString(), true), null, null, out err); } else { DbTSQLInterface.ExecNonQuery(ref conn, SetPassRequest(hashedString.ToString(), false), null, null, out err); } if (passResult != Errors.NoError) { //MessageBox.Show(this, "ќшибка сохранени¤ парол¤ " + getOwnerPass () + ". ѕароль не сохранЄн.", "ќшибка", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox("ќшибка сохранени¤ парол¤ " + getOwnerPass((int)m_idRolePass) + ". ѕароль не сохранЄн."); return(false); } return(true); }
private void threadPost(object par) { while (true) { INDEX_SEMATHREAD indx_semathread = (INDEX_SEMATHREAD)WaitHandle.WaitAny(m_arEvtThread); //Отправление сообщений... int err = -1; string toPost = string.Empty; if (m_listQueueMessage.Count > 0) { switch (s_mode) { case LOG_MODE.DB: if (m_evtConnSett.WaitOne(0, true) == true) { lock (m_objQueueMessage) { ////Отладка!!! //Console.WriteLine(@"Логгирование: сообщений на вХоде=" + m_listQueueMessage.Count); int indx_queue = 0 , cnt_running = 0; while ((indx_queue < m_listQueueMessage.Count) && (cnt_running < MAX_COUNT_MESSAGE_ONETIME)) { if (m_listQueueMessage[indx_queue].m_state == STATE_MESSAGE.QUEUE) { toPost += getInsertQuery(m_listQueueMessage[indx_queue]) + @";"; m_listQueueMessage[indx_queue].m_state = STATE_MESSAGE.RUNNING; cnt_running++; } else { ; } indx_queue++; } } DbTSQLInterface.ExecNonQuery(ref s_dbConn, toPost, null, null, out err); if (!(err == 0)) { //Ошибка при записи сообщений... retryQueueMessage(); disconnect(); m_evtConnSett.Reset(); } else { //Успех при записи сообщений... clearQueueMessage(); } ////Отладка!!! //lock (m_objQueueMessage) //{ // Console.WriteLine(@"Логгирование: сообщений на вЫходе=" + m_listQueueMessage.Count); // foreach (MESSAGE msg in m_listQueueMessage) // Console.WriteLine(@"Тип сообщения=" + msg.m_state.ToString ()); //} } else { ; //Нет соединения с БД } break; case LOG_MODE.FILE_EXE: case LOG_MODE.FILE_DESKTOP: case LOG_MODE.FILE_LOCALDEV: case LOG_MODE.FILE_NETDEV: bool locking = false; if ((!(m_listQueueMessage == null)) && (m_listQueueMessage.Count > 0)) { lock (m_objQueueMessage) { int indx_queue = 0; while (indx_queue < m_listQueueMessage.Count) { if (m_listQueueMessage[indx_queue].m_bSeparator == true) { toPost += MessageSeparator + Environment.NewLine; } else { ; } if (m_listQueueMessage[indx_queue].m_bDatetimeStamp == true) { toPost += m_listQueueMessage[indx_queue].m_strDatetimeReg + Environment.NewLine; toPost += DatetimeStampSeparator + Environment.NewLine; } else { ; } toPost += m_listQueueMessage[indx_queue].m_text + Environment.NewLine; if (m_listQueueMessage.Count == 1) { locking = m_listQueueMessage[indx_queue].m_bLockFile; } else { ; } if (locking == false) { if ((DateTime.Now - logRotateCheckLast).TotalSeconds > logRotateChekMaxSeconds) { //Принудить к проверке размера файла locking = true; } else { ; } } else { ; } m_listQueueMessage[indx_queue].m_state = STATE_MESSAGE.RUNNING; indx_queue++; } } if (locking == true) { LogLock(); LogCheckRotate(); } else { ; } if (File.Exists(m_fileName) == true) { try { if ((m_sw == null) || (m_fi == null)) { //Вариант №1 //FileInfo f = new FileInfo(m_fileName); //FileStream fs = f.Open(FileMode.Append, FileAccess.Write, FileShare.Write); //m_sw = new LogStreamWriter(fs, Encoding.GetEncoding("windows-1251")); //Вариант №2 m_sw = new LogStreamWriter(m_fileName, true, Encoding.GetEncoding("windows-1251")); m_fi = new FileInfo(m_fileName); } else { ; } m_sw.Write(toPost); m_sw.Flush(); } catch (Exception e) { retryQueueMessage(); /*m_sw.Close ();*/ m_sw = null; m_fi = null; } } else { retryQueueMessage(); } //if (externalLog == true) //{ // if (timeStamp == true) // delegateUpdateLogText(DateTime.Now.ToString() + ": " + message + Environment.NewLine); // else // delegateUpdateLogText(message + Environment.NewLine); //} //else // ; clearQueueMessage(); if (locking == true) { LogUnlock(); } else { ; } } else { } break; case LOG_MODE.UNKNOWN: default: break; } } else { ; } if (indx_semathread == INDEX_SEMATHREAD.STOP) { break; } else { m_arEvtThread[(int)INDEX_SEMATHREAD.MSG].Reset(); } } }
//Изменение (вставка) в оригинальную таблицу записей измененных (добавленных) в измененную таблицу (обязательно наличие поля: ID) public static void RecUpdateInsert(ref DbConnection conn, string nameTable, DataTable origin, DataTable data, out int err) { err = 0; int j = -1, k = -1; bool bUpdate = false; DataRow[] dataRows; string[] strQuery = new string[(int)DbTSQLInterface.QUERY_TYPE.COUNT_QUERY_TYPE]; string valuesForInsert = string.Empty; for (j = 0; j < data.Rows.Count; j++) { dataRows = origin.Select("ID=" + data.Rows[j]["ID"]); if (dataRows.Length == 0) { //INSERT strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT] = string.Empty; valuesForInsert = string.Empty; strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT] = "INSERT INTO " + nameTable + " ("; for (k = 0; k < data.Columns.Count; k++) { strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT] += data.Columns[k].ColumnName + ","; valuesForInsert += DbTSQLInterface.valueForQuery(data, j, k) + ","; } strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT] = strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT].Substring(0, strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT].Length - 1); valuesForInsert = valuesForInsert.Substring(0, valuesForInsert.Length - 1); strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT] += ") VALUES ("; strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT] += valuesForInsert + ")"; DbTSQLInterface.ExecNonQuery(ref conn, strQuery[(int)DbTSQLInterface.QUERY_TYPE.INSERT], null, null, out err); } else { if (dataRows.Length == 1) {//UPDATE bUpdate = false; strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE] = string.Empty; for (k = 0; k < data.Columns.Count; k++) { if (!(data.Rows[j][k].Equals(origin.Rows[j][k]) == true)) { if (bUpdate == false) { bUpdate = true; } else { ; } } else { ; } strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE] += data.Columns[k].ColumnName + "="; // + data.Rows[j][k] + ","; strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE] += DbTSQLInterface.valueForQuery(data, j, k) + ","; } if (bUpdate == true) {//UPDATE strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE] = strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE].Substring(0, strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE].Length - 1); strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE] = "UPDATE " + nameTable + " SET " + strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE] + " WHERE ID=" + data.Rows[j]["ID"]; DbTSQLInterface.ExecNonQuery(ref conn, strQuery[(int)DbTSQLInterface.QUERY_TYPE.UPDATE], null, null, out err); } else { ; } } else { throw new Exception("Невозможно определить тип изменения таблицы " + nameTable); } } } }
private void threadPost(object par) { while (true) { INDEX_SEMATHREAD indx_semathread = (INDEX_SEMATHREAD)WaitHandle.WaitAny(m_arEvtThread); //Отправление сообщений... int err = -1; string toPost = string.Empty; if (m_listQueueMessage.Count > 0) { switch (s_mode) { case LOG_MODE.DB: if (m_evtConnSett.WaitOne(0) == true) { lock (m_objQueueMessage) { ////Отладка!!! //Console.WriteLine(@"Логгирование: сообщений на вХоде=" + m_listQueueMessage.Count); int indx_queue = 0 , cnt_running = 0; while ((indx_queue < m_listQueueMessage.Count) && (cnt_running < MAX_COUNT_MESSAGE_ONETIME)) { if (m_listQueueMessage[indx_queue].m_state == STATE_MESSAGE.QUEUE) { toPost += getInsertQuery(m_listQueueMessage[indx_queue]) + @";"; m_listQueueMessage[indx_queue].m_state = STATE_MESSAGE.RUNNING; cnt_running++; } else { ; } indx_queue++; } } DbTSQLInterface.ExecNonQuery(ref s_dbConn, toPost, null, null, out err); if (!(err == 0)) { //Ошибка при записи сообщений... lock (m_objQueueMessage) { //Постановка ПОВТОРно сообщений в очередь foreach (MESSAGE msg in m_listQueueMessage) { if (msg.m_state == STATE_MESSAGE.RUNNING) { msg.m_state = STATE_MESSAGE.QUEUE; } else { ; } } } disconnect(); m_evtConnSett.Reset(); } else { //Успех при записи сообщений... lock (m_objQueueMessage) { //Найти обработанные сообщения List <int> listIndxMsgRunning = new List <int>(); foreach (MESSAGE msg in m_listQueueMessage) { if (msg.m_state == STATE_MESSAGE.RUNNING) { listIndxMsgRunning.Add(m_listQueueMessage.IndexOf(msg)); } else { ; } } //Сортировать список индексов в ОБРАТном порядке // для удаления сообщений из списка по ИНДЕКСу listIndxMsgRunning.Sort(delegate(int i1, int i2) { return(i1 > i2 ? -1 : 1); }); //Удалить обработанные сообщения foreach (int indx in listIndxMsgRunning) { m_listQueueMessage.RemoveAt(indx); } } } ////Отладка!!! //lock (m_objQueueMessage) //{ // Console.WriteLine(@"Логгирование: сообщений на вЫходе=" + m_listQueueMessage.Count); // foreach (MESSAGE msg in m_listQueueMessage) // Console.WriteLine(@"Тип сообщения=" + msg.m_state.ToString ()); //} } else { ; //Нет соединения с БД } break; case LOG_MODE.FILE: bool locking = false; if ((!(m_listQueueMessage == null)) && (m_listQueueMessage.Count > 0)) { lock (m_objQueueMessage) { while (m_listQueueMessage.Count > 0) { if (m_listQueueMessage[0].m_bSeparator == true) { toPost += MessageSeparator + Environment.NewLine; } else { ; } if (m_listQueueMessage[0].m_bDatetimeStamp == true) { toPost += m_listQueueMessage[0].m_strDatetimeReg + Environment.NewLine; toPost += DatetimeStampSeparator + Environment.NewLine; } else { ; } toPost += m_listQueueMessage[0].m_text + Environment.NewLine; if (m_listQueueMessage.Count == 1) { locking = m_listQueueMessage[0].m_bLockFile; } else { ; } m_listQueueMessage[0].m_state = STATE_MESSAGE.RUNNING; } } if (locking == true) { LogLock(); LogCheckRotate(); } else { ; } if (File.Exists(m_fileName) == true) { try { if ((m_sw == null) || (m_fi == null)) { //Вариант №1 //FileInfo f = new FileInfo(m_fileName); //FileStream fs = f.Open(FileMode.Append, FileAccess.Write, FileShare.Write); //m_sw = new LogStreamWriter(fs, Encoding.GetEncoding("windows-1251")); //Вариант №2 m_sw = new LogStreamWriter(m_fileName, true, Encoding.GetEncoding("windows-1251")); m_fi = new FileInfo(m_fileName); } else { ; } m_sw.Write(toPost); m_sw.Flush(); } catch (Exception e) { /*m_sw.Close ();*/ m_sw = null; m_fi = null; } } else { ; } //if (externalLog == true) //{ // if (timeStamp == true) // delegateUpdateLogText(DateTime.Now.ToString() + ": " + message + Environment.NewLine); // else // delegateUpdateLogText(message + Environment.NewLine); //} //else // ; lock (m_objQueueMessage) { m_listQueueMessage.RemoveAt(0); } if (locking == true) { LogUnlock(); } else { ; } } else { } break; case LOG_MODE.UNKNOWN: default: break; } } else { ; } if (indx_semathread == INDEX_SEMATHREAD.STOP) { break; } else { m_arEvtThread[(int)INDEX_SEMATHREAD.MSG].Reset(); } } }
public void Save(int idListener, List <ConnectionSettings> listConnSett, out int err) { err = 1; int i = -1, c = -1; string strQuery, psw , hash; //char []hash; //StringBuilder sb; strQuery = psw = string.Empty; DbConnection conn = DbSources.Sources().GetConnection(idListener, out err); //DbConnection conn = DbTSQLInterface.GetConnection (m_ConnectionSettings, out err); if (err == 0) { DataTable tableSource = null, tablePsw = null; if (err == 0) { for (i = 0; i < listConnSett.Count; i++) { tableSource = DbTSQLInterface.Select(ref conn, ConnectionSettingsRequest(listConnSett[i].id), null, null, out err); //TYPE_DATABASE_CFG.CFG_200 = ??? tablePsw = DbTSQLInterface.Select(ref conn, PasswordRequest(TYPE_DATABASE_CFG.CFG_200, listConnSett[i].id, 501), null, null, out err); if (tableSource.Rows.Count == 0) {//INSERT } else if (tableSource.Rows.Count == 1) { //UPDATE if ((listConnSett[i].server.Equals(tableSource.Rows [0]["IP"].ToString()) == false) || (listConnSett[i].dbName.Equals(tableSource.Rows[0]["DB_NAME"].ToString()) == false) || (listConnSett[i].userName.Equals(tableSource.Rows[0]["UID"].ToString()) == false)) { strQuery += "UPDATE SOURCE SET "; strQuery += "IP='" + listConnSett[i].server + "',"; strQuery += "DB_NAME='" + listConnSett[i].dbName + "',"; strQuery += "UID='" + listConnSett[i].userName + "'"; strQuery += " WHERE ID=" + listConnSett[i].id + ";"; } else { ; //Ничего не изменилось } if (listConnSett[i].password.Length > 0) { //sb = new StringBuilder(listConnSett[i].password); //hash = Crypt.Crypting().to(sb, out err); hash = Crypt.Crypting().Encrypt(listConnSett[i].password, Crypt.KEY); //if (err > 0) if (hash.Length > 0) { if (tablePsw.Rows.Count == 0) { //INSERT strQuery += "INSERT INTO passwords (ID_EXT, ID_ROLE, HASH) VALUES ("; strQuery += listConnSett[i].id + ", "; strQuery += 501 + ", "; strQuery += "'" + hash + "'"; strQuery += ");"; } else if (tablePsw.Rows.Count == 1) { //UPDATE strQuery += "UPDATE passwords SET "; strQuery += "HASH='" + hash + "'"; strQuery += " WHERE ID_EXT=" + listConnSett[i].id; strQuery += " AND "; strQuery += "ID_ROLE=" + 501 + ";"; } else { ; } } else { ; //Ошибка шифрования пароля ИЛИ нет пароля } } else { ; //Нет пароля } } else { ; } } DbTSQLInterface.ExecNonQuery(ref conn, strQuery, null, null, out err); } else { ; } } else { ; } //DbTSQLInterface.CloseConnection (conn, out err); }