Advertisement
Guest User

SQL DAL

a guest
Jul 23rd, 2013
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.18 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.Data.SqlClient;
  6. using System.Linq;
  7.  
  8. namespace Helpers
  9. {
  10.     /// <summary>
  11.     /// Работа с SQL
  12.     /// </summary>
  13.     public static class SQLHelpers
  14.     {
  15.         /// <summary>
  16.         /// Выполнить SQL запрос и получить ответный результат в DataSet
  17.         /// </summary>
  18.         /// <param name="connectionString">Строка подключения</param>
  19.         /// <param name="command">Запрос</param>
  20.         /// <returns></returns>
  21.         private static DataSet ExecuteSqlCommand(string connectionString, SqlCommand command)
  22.         {
  23.             using (var connection = new SqlConnection(connectionString))
  24.             {
  25.                 connection.Open();
  26.                 var dataSet = ExecuteSqlCommand(connection, command);
  27.                 connection.Close();
  28.                 return dataSet;
  29.             }
  30.         }
  31.  
  32.         /// <summary>
  33.         /// Выполнить SQL запрос и получить ответный результат в DataSet
  34.         /// </summary>
  35.         /// <param name="connection">Подключение</param>
  36.         /// <param name="command">Запрос</param>
  37.         /// <returns></returns>
  38.         private static DataSet ExecuteSqlCommand(SqlConnection connection, SqlCommand command)
  39.         {
  40.             var dataSet = new DataSet();
  41.             command.Connection = connection;
  42.             command.CommandTimeout = 1000000;
  43.             using(var adapter = new SqlDataAdapter(command))
  44.             {
  45.                 adapter.Fill(dataSet);
  46.             }
  47.             return dataSet;
  48.         }
  49.  
  50.  
  51.         /// <summary>
  52.         /// Выполнить SQL запрос и получить первую таблицу ответа в DataTable
  53.         /// </summary>
  54.         /// <param name="connectionString">Строка подключения</param>
  55.         /// <param name="command">Запрос</param>
  56.         /// <returns></returns>
  57.         public static DataTable GetDataTable(string connectionString, SqlCommand command)
  58.         {
  59.             var dataSet = ExecuteSqlCommand(connectionString, command);
  60.             return dataSet.Tables[0];
  61.         }
  62.  
  63.         /// <summary>
  64.         /// Выполнить SQL запрос и получить первую таблицу ответа в DataTable
  65.         /// </summary>
  66.         /// <param name="connection">Подключение</param>
  67.         /// <param name="command">Запрос</param>
  68.         /// <returns></returns>
  69.         public static DataTable GetDataTable(SqlConnection connection, SqlCommand command)
  70.         {
  71.             var dataSet = ExecuteSqlCommand(connection, command);
  72.             return dataSet.Tables[0];
  73.         }
  74.  
  75.         /// <summary>
  76.         /// Выполнить SQL запрос и получить ответный результат в DataSet
  77.         /// </summary>
  78.         /// <param name="connectionString">Строка подключения</param>
  79.         /// <param name="command">Запрос</param>
  80.         /// <returns></returns>
  81.         public static DataSet GetDataSet(string connectionString, SqlCommand command)
  82.         {
  83.             return ExecuteSqlCommand(connectionString, command);
  84.         }
  85.  
  86.         /// <summary>
  87.         /// Выполнить SQL запрос и получить ответный результат в DataSet
  88.         /// </summary>
  89.         /// <param name="connection">Подключение</param>
  90.         /// <param name="command">Запрос</param>
  91.         /// <returns></returns>
  92.         public static DataSet GetDataSet(SqlConnection connection, SqlCommand command)
  93.         {
  94.             return ExecuteSqlCommand(connection, command);
  95.         }
  96.  
  97.         /// <summary>
  98.         /// Выполнить SQL запрос без получения результата
  99.         /// </summary>
  100.         /// <param name="connectionString">Строка подключения</param>
  101.         /// <param name="command">Запрос</param>
  102.         /// <returns></returns>
  103.         public static void ExecuteNonQuery(string connectionString, SqlCommand command)
  104.         {
  105.             ExecuteSqlCommand(connectionString, command);
  106.         }
  107.  
  108.         /// <summary>
  109.         /// Выполнить SQL запрос без получения результата
  110.         /// </summary>
  111.         /// <param name="connection">Подключение</param>
  112.         /// <param name="command">Запрос</param>
  113.         /// <returns></returns>
  114.         public static void ExecuteNonQuery(SqlConnection connection, SqlCommand command)
  115.         {
  116.             ExecuteSqlCommand(connection, command);
  117.         }
  118.  
  119.         /// <summary>
  120.         /// Получить поле из строки таблицы с указанным типом
  121.         /// </summary>
  122.         /// <typeparam name="T">Тип поля</typeparam>
  123.         /// <param name="row">Строка таблицы</param>
  124.         /// <param name="columnName">Название колонки</param>
  125.         /// <param name="columnNumber">Номер колонки</param>
  126.         private static T GetField<T>(DataRow row, string columnName, int? columnNumber)
  127.         {
  128.             var column = columnNumber.HasValue ? row[columnNumber.Value] : row[columnName];
  129.             return Cast<T>(column);
  130.         }
  131.  
  132.         /// <summary>
  133.         /// Безопасное приведение объекта к указанному типу
  134.         /// </summary>
  135.         /// <typeparam name="T">Требуемый тип</typeparam>
  136.         /// <param name="value">Приводимый объект</param>
  137.         /// <returns></returns>
  138.         public static T Cast<T>(object value)
  139.         {
  140.             var field = default(T);
  141.             bool isNullableType = IsNullable(field);
  142.             if (isNullableType)
  143.             {
  144.                 if (value == DBNull.Value) field = default(T);
  145.                 else
  146.                 {
  147.                     var baseType = typeof(T).GetGenericArguments().Any() ? typeof(T).GetGenericArguments()[0] : typeof(T);
  148.                     field = (T)Convert.ChangeType(value, baseType);
  149.                 }
  150.                 return field;
  151.             }
  152.  
  153.             field = (T)Convert.ChangeType(value, typeof(T));
  154.             return field;
  155.         }
  156.  
  157.         /// <summary>
  158.         /// Получить поле из строки таблицы с указанным типом
  159.         /// </summary>
  160.         /// <typeparam name="T">Тип поля</typeparam>
  161.         /// <param name="row">Строка таблицы</param>
  162.         /// <param name="columnNumber">Номер колонки</param>
  163.         /// <returns></returns>
  164.         public static T GetField<T>(DataRow row, int columnNumber)
  165.         {
  166.             return GetField<T>(row, null, columnNumber);
  167.         }
  168.  
  169.  
  170.         /// <summary>
  171.         /// Получить поле из строки таблицы с указанным типом
  172.         /// </summary>
  173.         /// <typeparam name="T">Тип поля</typeparam>
  174.         /// <param name="row">Строка таблицы</param>
  175.         /// <param name="columnName">Название колонки</param>
  176.         /// <returns></returns>
  177.         public static T GetField<T>(DataRow row, string columnName)
  178.         {
  179.             return GetField<T>(row, columnName, null);
  180.         }
  181.  
  182.         /// <summary>
  183.         /// Проверить, является ли тип переменной Nullable
  184.         /// </summary>
  185.         /// <typeparam name="T">Тип переменной</typeparam>
  186.         /// <param name="obj">Переменная</param>
  187.         /// <returns>Nullable или нет</returns>
  188.         private static bool IsNullable<T>(T obj)
  189.         {
  190.             if (obj == null)
  191.                 return true;
  192.            
  193.             Type type = typeof(T);
  194.             if (!type.IsValueType)
  195.                 return true;
  196.  
  197.             if (Nullable.GetUnderlyingType(type) != null)
  198.                 return true;
  199.            
  200.             return false;
  201.         }
  202.  
  203.         /// <summary>
  204.         /// Выполнить SQL запрос и получить первую таблицу ответа в DataTable
  205.         /// </summary>
  206.         /// <param name="connectionString">Строка подключения</param>
  207.         /// <param name="procedureName">Название хранимой процедуры</param>
  208.         /// <param name="parameters">Коллекция параметров</param>
  209.         /// <returns></returns>
  210.         public static DataTable GetDataTable(string connectionString, string procedureName, Hashtable parameters)
  211.         {
  212.             var command = new SqlCommand
  213.             {
  214.                 CommandType = CommandType.StoredProcedure,
  215.                 CommandText = procedureName
  216.             };
  217.  
  218.             foreach(DictionaryEntry parameter in parameters)
  219.             {
  220.                 command.Parameters.AddWithValue(parameter.Key.ToString(), parameter.Value ?? DBNull.Value);
  221.             }
  222.             return GetDataTable(connectionString, command);
  223.         }
  224.  
  225.         /// <summary>
  226.         /// Выполнить SQL запрос и получить первую таблицу ответа в DataTable
  227.         /// </summary>
  228.         /// <param name="connection">Подключение</param>
  229.         /// <param name="procedureName">Название хранимой процедуры</param>
  230.         /// <param name="parameters">Коллекция параметров</param>
  231.         /// <returns></returns>
  232.         public static DataTable GetDataTable(SqlConnection connection, string procedureName, Hashtable parameters)
  233.         {
  234.             var command = new SqlCommand
  235.             {
  236.                 CommandType = CommandType.StoredProcedure,
  237.                 CommandText = procedureName
  238.             };
  239.  
  240.             foreach (DictionaryEntry parameter in parameters)
  241.             {
  242.                 command.Parameters.AddWithValue(parameter.Key.ToString(), parameter.Value ?? DBNull.Value);
  243.             }
  244.             return GetDataTable(connection, command);
  245.         }
  246.  
  247.         /// <summary>
  248.         /// Выполнить SQL запрос и получить ответ в DataSet
  249.         /// </summary>
  250.         /// <param name="connectionString">Строка подключения</param>
  251.         /// <param name="procedureName">Название хранимой процедуры</param>
  252.         /// <param name="parameters">Коллекция параметров</param>
  253.         /// <returns></returns>
  254.         public static DataSet GetDataSet(string connectionString, string procedureName, Hashtable parameters)
  255.         {
  256.             var command = new SqlCommand
  257.             {
  258.                 CommandType = CommandType.StoredProcedure,
  259.                 CommandText = procedureName
  260.             };
  261.  
  262.             foreach (DictionaryEntry parameter in parameters)
  263.             {
  264.                 command.Parameters.AddWithValue(parameter.Key.ToString(), parameter.Value ?? DBNull.Value);
  265.             }
  266.             return GetDataSet(connectionString, command);
  267.         }
  268.  
  269.         /// <summary>
  270.         /// Выполнить SQL запрос без получения результата
  271.         /// </summary>
  272.         /// <param name="connectionString">Строка подключения</param>
  273.         /// <param name="procedureName">название хранимой процедуры</param>
  274.         /// <param name="parameters">Коллекция параметров</param>
  275.         /// <returns></returns>
  276.         public static void ExecuteNonQuery(string connectionString, string procedureName, Hashtable parameters)
  277.         {
  278.             var command = new SqlCommand
  279.             {
  280.                 CommandType = CommandType.StoredProcedure,
  281.                 CommandText = procedureName
  282.             };
  283.  
  284.             foreach (DictionaryEntry parameter in parameters)
  285.             {
  286.                 command.Parameters.AddWithValue(parameter.Key.ToString(), parameter.Value ?? DBNull.Value);
  287.             }
  288.             ExecuteSqlCommand(connectionString, command);
  289.         }
  290.     }
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement