Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections;
- using System.Configuration;
- using System.Data;
- using System.Data.SqlClient;
- using System.Linq;
- namespace Helpers
- {
- /// <summary>
- /// Работа с SQL
- /// </summary>
- public static class SQLHelpers
- {
- /// <summary>
- /// Выполнить SQL запрос и получить ответный результат в DataSet
- /// </summary>
- /// <param name="connectionString">Строка подключения</param>
- /// <param name="command">Запрос</param>
- /// <returns></returns>
- private static DataSet ExecuteSqlCommand(string connectionString, SqlCommand command)
- {
- using (var connection = new SqlConnection(connectionString))
- {
- connection.Open();
- var dataSet = ExecuteSqlCommand(connection, command);
- connection.Close();
- return dataSet;
- }
- }
- /// <summary>
- /// Выполнить SQL запрос и получить ответный результат в DataSet
- /// </summary>
- /// <param name="connection">Подключение</param>
- /// <param name="command">Запрос</param>
- /// <returns></returns>
- private static DataSet ExecuteSqlCommand(SqlConnection connection, SqlCommand command)
- {
- var dataSet = new DataSet();
- command.Connection = connection;
- command.CommandTimeout = 1000000;
- using(var adapter = new SqlDataAdapter(command))
- {
- adapter.Fill(dataSet);
- }
- return dataSet;
- }
- /// <summary>
- /// Выполнить SQL запрос и получить первую таблицу ответа в DataTable
- /// </summary>
- /// <param name="connectionString">Строка подключения</param>
- /// <param name="command">Запрос</param>
- /// <returns></returns>
- public static DataTable GetDataTable(string connectionString, SqlCommand command)
- {
- var dataSet = ExecuteSqlCommand(connectionString, command);
- return dataSet.Tables[0];
- }
- /// <summary>
- /// Выполнить SQL запрос и получить первую таблицу ответа в DataTable
- /// </summary>
- /// <param name="connection">Подключение</param>
- /// <param name="command">Запрос</param>
- /// <returns></returns>
- public static DataTable GetDataTable(SqlConnection connection, SqlCommand command)
- {
- var dataSet = ExecuteSqlCommand(connection, command);
- return dataSet.Tables[0];
- }
- /// <summary>
- /// Выполнить SQL запрос и получить ответный результат в DataSet
- /// </summary>
- /// <param name="connectionString">Строка подключения</param>
- /// <param name="command">Запрос</param>
- /// <returns></returns>
- public static DataSet GetDataSet(string connectionString, SqlCommand command)
- {
- return ExecuteSqlCommand(connectionString, command);
- }
- /// <summary>
- /// Выполнить SQL запрос и получить ответный результат в DataSet
- /// </summary>
- /// <param name="connection">Подключение</param>
- /// <param name="command">Запрос</param>
- /// <returns></returns>
- public static DataSet GetDataSet(SqlConnection connection, SqlCommand command)
- {
- return ExecuteSqlCommand(connection, command);
- }
- /// <summary>
- /// Выполнить SQL запрос без получения результата
- /// </summary>
- /// <param name="connectionString">Строка подключения</param>
- /// <param name="command">Запрос</param>
- /// <returns></returns>
- public static void ExecuteNonQuery(string connectionString, SqlCommand command)
- {
- ExecuteSqlCommand(connectionString, command);
- }
- /// <summary>
- /// Выполнить SQL запрос без получения результата
- /// </summary>
- /// <param name="connection">Подключение</param>
- /// <param name="command">Запрос</param>
- /// <returns></returns>
- public static void ExecuteNonQuery(SqlConnection connection, SqlCommand command)
- {
- ExecuteSqlCommand(connection, command);
- }
- /// <summary>
- /// Получить поле из строки таблицы с указанным типом
- /// </summary>
- /// <typeparam name="T">Тип поля</typeparam>
- /// <param name="row">Строка таблицы</param>
- /// <param name="columnName">Название колонки</param>
- /// <param name="columnNumber">Номер колонки</param>
- private static T GetField<T>(DataRow row, string columnName, int? columnNumber)
- {
- var column = columnNumber.HasValue ? row[columnNumber.Value] : row[columnName];
- return Cast<T>(column);
- }
- /// <summary>
- /// Безопасное приведение объекта к указанному типу
- /// </summary>
- /// <typeparam name="T">Требуемый тип</typeparam>
- /// <param name="value">Приводимый объект</param>
- /// <returns></returns>
- public static T Cast<T>(object value)
- {
- var field = default(T);
- bool isNullableType = IsNullable(field);
- if (isNullableType)
- {
- if (value == DBNull.Value) field = default(T);
- else
- {
- var baseType = typeof(T).GetGenericArguments().Any() ? typeof(T).GetGenericArguments()[0] : typeof(T);
- field = (T)Convert.ChangeType(value, baseType);
- }
- return field;
- }
- field = (T)Convert.ChangeType(value, typeof(T));
- return field;
- }
- /// <summary>
- /// Получить поле из строки таблицы с указанным типом
- /// </summary>
- /// <typeparam name="T">Тип поля</typeparam>
- /// <param name="row">Строка таблицы</param>
- /// <param name="columnNumber">Номер колонки</param>
- /// <returns></returns>
- public static T GetField<T>(DataRow row, int columnNumber)
- {
- return GetField<T>(row, null, columnNumber);
- }
- /// <summary>
- /// Получить поле из строки таблицы с указанным типом
- /// </summary>
- /// <typeparam name="T">Тип поля</typeparam>
- /// <param name="row">Строка таблицы</param>
- /// <param name="columnName">Название колонки</param>
- /// <returns></returns>
- public static T GetField<T>(DataRow row, string columnName)
- {
- return GetField<T>(row, columnName, null);
- }
- /// <summary>
- /// Проверить, является ли тип переменной Nullable
- /// </summary>
- /// <typeparam name="T">Тип переменной</typeparam>
- /// <param name="obj">Переменная</param>
- /// <returns>Nullable или нет</returns>
- private static bool IsNullable<T>(T obj)
- {
- if (obj == null)
- return true;
- Type type = typeof(T);
- if (!type.IsValueType)
- return true;
- if (Nullable.GetUnderlyingType(type) != null)
- return true;
- return false;
- }
- /// <summary>
- /// Выполнить SQL запрос и получить первую таблицу ответа в DataTable
- /// </summary>
- /// <param name="connectionString">Строка подключения</param>
- /// <param name="procedureName">Название хранимой процедуры</param>
- /// <param name="parameters">Коллекция параметров</param>
- /// <returns></returns>
- public static DataTable GetDataTable(string connectionString, string procedureName, Hashtable parameters)
- {
- var command = new SqlCommand
- {
- CommandType = CommandType.StoredProcedure,
- CommandText = procedureName
- };
- foreach(DictionaryEntry parameter in parameters)
- {
- command.Parameters.AddWithValue(parameter.Key.ToString(), parameter.Value ?? DBNull.Value);
- }
- return GetDataTable(connectionString, command);
- }
- /// <summary>
- /// Выполнить SQL запрос и получить первую таблицу ответа в DataTable
- /// </summary>
- /// <param name="connection">Подключение</param>
- /// <param name="procedureName">Название хранимой процедуры</param>
- /// <param name="parameters">Коллекция параметров</param>
- /// <returns></returns>
- public static DataTable GetDataTable(SqlConnection connection, string procedureName, Hashtable parameters)
- {
- var command = new SqlCommand
- {
- CommandType = CommandType.StoredProcedure,
- CommandText = procedureName
- };
- foreach (DictionaryEntry parameter in parameters)
- {
- command.Parameters.AddWithValue(parameter.Key.ToString(), parameter.Value ?? DBNull.Value);
- }
- return GetDataTable(connection, command);
- }
- /// <summary>
- /// Выполнить SQL запрос и получить ответ в DataSet
- /// </summary>
- /// <param name="connectionString">Строка подключения</param>
- /// <param name="procedureName">Название хранимой процедуры</param>
- /// <param name="parameters">Коллекция параметров</param>
- /// <returns></returns>
- public static DataSet GetDataSet(string connectionString, string procedureName, Hashtable parameters)
- {
- var command = new SqlCommand
- {
- CommandType = CommandType.StoredProcedure,
- CommandText = procedureName
- };
- foreach (DictionaryEntry parameter in parameters)
- {
- command.Parameters.AddWithValue(parameter.Key.ToString(), parameter.Value ?? DBNull.Value);
- }
- return GetDataSet(connectionString, command);
- }
- /// <summary>
- /// Выполнить SQL запрос без получения результата
- /// </summary>
- /// <param name="connectionString">Строка подключения</param>
- /// <param name="procedureName">название хранимой процедуры</param>
- /// <param name="parameters">Коллекция параметров</param>
- /// <returns></returns>
- public static void ExecuteNonQuery(string connectionString, string procedureName, Hashtable parameters)
- {
- var command = new SqlCommand
- {
- CommandType = CommandType.StoredProcedure,
- CommandText = procedureName
- };
- foreach (DictionaryEntry parameter in parameters)
- {
- command.Parameters.AddWithValue(parameter.Key.ToString(), parameter.Value ?? DBNull.Value);
- }
- ExecuteSqlCommand(connectionString, command);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement