/// <summary>Массовая вставка данных в SQL из DataTable</summary> /// <param name="pDataTable">Строка SQL кода</param> /// <returns>Возвращаем bool</returns> public static bool MET_SqlBulkCopy(DataTable pDataTable) { bool _Result; try { if (sqlConct.State == ConnectionState.Closed) { sqlConct.Open(); // открываем базу } // Создаем объект SqlBulkCopy, указываем таблицу назначения и загружаем. using (var loader = new SqlBulkCopy(sqlConct)) { loader.DestinationTableName = "StrahZero"; loader.WriteToServer(pDataTable); } _Result = false; } catch (Exception ex) { MyGlo.PUB_Logger.Fatal(ex, "Ошибка массовой вставки SqlBulkCopy"); MyGlo.Event_Error(ex); _Result = false; } return(_Result); }
/// <summary>Заполняем DataSet Базиса (<see cref="MyGlo.DataSet"/>)</summary> /// <param name="pStrSQL">Строка SQL кода</param> /// <param name="pNameTable">Наименование таблицы</param> public static int MET_DsAdapterFill(string pStrSQL, string pNameTable) { int _CountTimeout = 0; // попытки достучаться до сервера (5 попыток) SqlDataAdapter _SqlDa = new SqlDataAdapter(pStrSQL, sqlConct); // создаем адаптер label1: try { // Предварительно удаляем таблицу if (MyGlo.DataSet.Tables[pNameTable] != null) { MyGlo.DataSet.Tables[pNameTable].Clear(); } // Загружаем данные return(_SqlDa.Fill(MyGlo.DataSet, pNameTable)); } catch (SqlException ex) // проблемы со связью { if (ex.Number == -2 && _CountTimeout++ < 5) { goto label1; } ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Загрузки данных в DataSet из SQL"); MyGlo.Event_Error(ex); goto label1; } catch // остальные проблемы { MyGlo.DataSet.Tables.Remove(pNameTable); return(_SqlDa.Fill(MyGlo.DataSet, pNameTable)); } }
/// <summary>Выполняем XML запрос (без возврата значений)</summary> /// <param name="pStrSQL">Строка SQL кода</param> /// <param name="pFile">Имя файла</param> public static void MET_QueryXML(string pStrSQL, string pFile) { int _CountTimeout = 0; // попытки достучаться до сервера (5 попыток) XmlDocument _Doc = new XmlDocument(); XmlDeclaration _XmlDecl = _Doc.CreateXmlDeclaration("1.0", "windows-1251", null); label1: try { if (sqlConct.State == ConnectionState.Closed) { sqlConct.Open(); // открываем базу } SqlCommand _SqlCom = new SqlCommand(pStrSQL, sqlConct); // создаем команду _SqlCom.CommandTimeout = 90000000; try { using (XmlReader _Read = _SqlCom.ExecuteXmlReader()) // выполянем запрос { _Doc.Load(_Read); _Read.Close(); } } catch (SqlException ex) { if (ex.Number == -2 && _CountTimeout++ < 5) { goto label1; } ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (формирование XML файла)"); } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (формирование XML файла)"); } } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (формирование XML файла)"); MyGlo.Event_Error(ex); goto label1; } // Добавляем ветку рут XmlElement _Root = _Doc.DocumentElement; _Doc.InsertBefore(_XmlDecl, _Root); sqlConct.Close(); // закрываем подключение // Имя файла string _PathToXml = @"c:\1Reestrs\" + pFile + ".xml"; // Сохроняем xml в файл _Doc.Save(_PathToXml); }
/// <summary>Выполняем запрос (возвращаем Hashtable)</summary> /// <param name="pStrSQL">Строка SQL кода</param> /// <returns>Возвращаем Hashtable (список: ключ/значение)</returns> public static Hashtable MET_QueryHash(string pStrSQL) { Hashtable _Value = new Hashtable(); int _CountTimeout = 0; // попытки достучаться до сервера (5 попыток) label1: try { if (sqlConct.State == ConnectionState.Closed) { sqlConct.Open(); // открываем базу } SqlCommand _SqlCom = new SqlCommand(pStrSQL, sqlConct); // создаем команду try { SqlDataReader _SqlDr = _SqlCom.ExecuteReader(); // выполянем запрос _SqlDr.Read(); if (_SqlDr.HasRows) // есть ли записи { for (int i = 0; i <= _SqlDr.FieldCount - 1; i++) { _Value.Add(_SqlDr.GetName(i), _SqlDr.GetValue(i)); } } } catch (SqlException ex) { if (ex.Number == -2 && _CountTimeout++ < 5) { goto label1; } ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (возвращающего Hashtable)"); } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (возвращающего Hashtable)"); } } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (возвращающего Hashtable)"); MyGlo.Event_Error(ex); goto label1; } sqlConct.Close(); // закрываем подключение return(_Value); }
/// <summary>МЕТОД Возвращает true, если есть хоть одна строка</summary> /// <param name="pStrSQL">Строка SQL кода</param> /// <returns>Возвращаем bool</returns> public static bool MET_QueryBool(string pStrSQL) { bool _Value = false; // результат int _CountTimeout = 0; // попытки достучаться до сервера (5 попыток) label1: try { if (sqlConct.State == ConnectionState.Closed) { sqlConct.Open(); // открываем базу } SqlCommand _SqlCom = new SqlCommand(pStrSQL, sqlConct); // создаем команду try { if (_SqlCom.ExecuteScalar() == null) // выполянем запрос { _Value = false; // нет строк } else { _Value = true; // есть строки } } catch (SqlException ex) { if (ex.Number == -2 && _CountTimeout++ < 5) { goto label1; } ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (возвращающего bool)"); } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (возвращающего bool)"); } } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (возвращающего bool)"); MyGlo.Event_Error(ex); goto label1; } sqlConct.Close(); // закрываем подключение return(_Value); }
/// <summary>Выполняем запрос (возвращаем SqlDataReader)</summary> /// <param name="pStrSQL">Строка SQL кода</param> /// <returns>Возвращаем SqlDataReader</returns> public static SqlDataReader MET_QuerySqlDataReader(string pStrSQL) { int _CountTimeout = 0; // попытки достучаться до сервера (5 попыток) label1: try { if (sqlConct.State == ConnectionState.Closed) { sqlConct.Open(); // открываем базу } SqlCommand _SqlCom = new SqlCommand(pStrSQL, sqlConct); // создаем команду try { SqlDataReader _SqlDr = _SqlCom.ExecuteReader(CommandBehavior.CloseConnection); // выполянем запрос return(_SqlDr); } catch (SqlException ex) { if (ex.Number == -2 && _CountTimeout++ < 5) { goto label1; } ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (возвращающего DataReader)"); MyGlo.Event_Error(ex); goto label1; } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (возвращающего DataReader)"); MyGlo.Event_Error(ex); goto label1; } } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (возвращающего DataReader)"); MyGlo.Event_Error(ex); goto label1; } }
/// <summary>Выполняем запрос (возвращаем реальное число)</summary> /// <param name="pStrSQL">Строка SQL кода</param> /// <returns>Возвращаем реальное число</returns> public static decimal MET_QueryDec(string pStrSQL) { decimal _Value = 0; // результат int _CountTimeout = 0; // попытки достучаться до сервера (5 попыток) SqlConnection _SqlCon = new SqlConnection(); // создаем подключение к базе _SqlCon.ConnectionString = MET_ConSql(); // строка инициализации подключения к базе label1: try { if (sqlConct.State == ConnectionState.Closed) { sqlConct.Open(); // открываем базу } SqlCommand _SqlCom = new SqlCommand(pStrSQL, sqlConct); // создаем команду try { _Value = MyMet.MET_ParseDec(_SqlCom.ExecuteScalar()); // выполянем запрос } catch (SqlException ex) { if (ex.Number == -2 && _CountTimeout++ < 5) { goto label1; } ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (возвращающего реальное число)"); } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (возвращающего реальное число)"); } } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (возвращающего реальное число)"); MyGlo.Event_Error(ex); goto label1; } sqlConct.Close(); // закрываем подключение return(_Value); }
/// <summary>Выполняем запрос (без возврата значений)</summary> /// <param name="pStrSQL">Строка SQL кода</param> /// <returns>true - успешное выполнение запроса, false - что то пошло не так</returns> public static bool MET_QueryNo(string pStrSQL) { int _CountTimeout = 0; // попытки достучаться до сервера (5 попыток) bool _Result = false; label1: try { if (sqlConct.State == ConnectionState.Closed) { sqlConct.Open(); // открываем базу } SqlCommand _SqlCom = new SqlCommand(pStrSQL, sqlConct); // создаем команду try { _SqlCom.ExecuteNonQuery(); // выполянем запрос _Result = true; } catch (SqlException ex) { if (ex.Number == -2 && _CountTimeout++ < 5) { goto label1; } ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (без возврата значения)"); } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (без возврата значения)"); } } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (без возврата значения)"); MyGlo.Event_Error(ex); goto label1; } sqlConct.Close(); // закрываем подключение return(_Result); }
/// <summary>МЕТОД Работа с изображениями</summary> /// <param name="pStrSQL">Строка SQL кода</param> /// <param name="pImage">Наименование поля картинки</param> /// <param name="photo">Байтовый массив изображения</param> public static void MET_QueryNoImage(string pStrSQL, string pImage, byte[] photo) { int _CountTimeout = 0; // попытки достучаться до сервера (5 попыток) label1: try { SqlCommand _SqlCom = new SqlCommand(pStrSQL, sqlConct); // создаем команду _SqlCom.Parameters.Add("@Image", SqlDbType.Image, photo.Length).Value = photo; if (sqlConct.State == ConnectionState.Closed) { sqlConct.Open(); // открываем базу } try { _SqlCom.ExecuteNonQuery(); // выполянем запрос } catch (SqlException ex) { if (ex.Number == -2 && _CountTimeout++ < 5) { goto label1; } ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (для работы с изображениями)"); } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Error(ex, "Ошибка Запроса SQL (для работы с изображениями)"); } } catch (Exception ex) { ex.Data["SQL"] = pStrSQL; MyGlo.PUB_Logger.Fatal(ex, "Ошибка Запроса SQL (для работы с изображениями)"); MyGlo.Event_Error(ex); goto label1; } sqlConct.Close(); // закрываем подключение }