Advertisement
Guest User

DatabaseContext

a guest
Dec 9th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.22 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3. using System.Data;
  4. using System.Data.SqlClient;
  5. using System.Diagnostics;
  6. using System.Collections.Generic;
  7. using System.Configuration;
  8.  
  9. namespace DAL
  10. {
  11.     /// <summary>
  12.     /// Classe padrão de acesso ao banco de dados.
  13.     /// </summary>
  14.     internal class DatabaseContext
  15.     {
  16.  
  17.         //#if (DEBUG)
  18.         //    private const string CONNECTION_STRING_NAME = "DefaultConnection";
  19.         //#else
  20.         //        private const string CONNECTION_STRING_NAME = "DefaultConnection";
  21.         //#endif
  22.  
  23.         private string _idString;
  24.  
  25.         public DatabaseContext(string idString)
  26.         {
  27.             _idString = idString;
  28.         }
  29.  
  30.         internal string GetConnectionString(out Exception erro)
  31.         {
  32.             erro = null;
  33.  
  34.             string connString = "";
  35.             try
  36.             {
  37.                 connString = ConfigurationManager.ConnectionStrings[_idString].ConnectionString;
  38.  
  39.                 SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connString);
  40.  
  41. #if (DEBUG)
  42.                 builder.Password = "helpdesk";
  43. #else
  44.                 builder.Password = "helpdesk";
  45. #endif
  46.                 return builder.ConnectionString;
  47.  
  48.             }
  49.             catch (Exception ex)
  50.             {
  51.                 erro = ex;
  52.                 Debug.WriteLine(ex.Message);
  53.                 return string.Empty;
  54.             }
  55.  
  56.         }
  57.         /// <summary>
  58.         /// Método que pesquisa e retorna dados em um DataTable na base:
  59.         /// </summary>
  60.         /// <param name="cmd"></param>
  61.         /// <returns></returns>
  62.  
  63.         public DataTable ExecuteReader(ref SqlCommand cmd, out Exception erro)
  64.         {
  65.             return (DataTable)Execute(ref cmd, EnuDMLExecute.Reader, out erro);
  66.         }
  67.         /// <summary>
  68.         /// Método que pesquisa e retorna um único valor na base:
  69.         /// </summary>
  70.         /// <param name="cmd"></param>
  71.         /// <returns></returns>
  72.         public string ExecuteScalar(ref SqlCommand cmd, out Exception erro)
  73.         {
  74.             return Execute(ref cmd, EnuDMLExecute.Scalar, out erro).ToString();
  75.         }
  76.  
  77.         /// <summary>
  78.         /// Método que altera e retorna a quantidade de registros afetados na base:
  79.         /// </summary>
  80.         /// <param name="cmd"></param>
  81.         /// <returns>int</returns>
  82.         public int ExecuteNonQuery(ref SqlCommand cmd, out Exception erro)
  83.         {
  84.             return (int)Execute(ref cmd, EnuDMLExecute.NonQuery, out erro);
  85.         }
  86.         /// <summary>
  87.         /// Método que executa a conexão com o banco de dados e retorna, dependendo de <dml>:
  88.         /// - EnuDMLExecute.Reader   => DataTable
  89.         /// - EnuDMLExecute.NonQuery => int
  90.         /// - EnuDMLExecute.Scalar   => objeto
  91.         /// </summary>
  92.         /// <param name="cmd"></param>
  93.         /// <param name="dml"></param>
  94.         /// <param name="tr"></param>
  95.         /// <returns></returns>
  96.         public object Execute(ref SqlCommand cmd, EnuDMLExecute dml, out Exception erro)
  97.         {
  98.  
  99.             object ret = null;
  100.  
  101.             try
  102.             {
  103.                 using (SqlConnection cnn = new SqlConnection(GetConnectionString(out erro)))
  104.                 {
  105.                     cnn.Open();
  106.                     using (SqlCommand comm = cmd)
  107.                     {
  108.                         comm.Connection = cnn;
  109. #if (DEBUG)
  110.                         comm.CommandTimeout = 100;
  111. #else
  112.                         comm.CommandTimeout = 30;
  113. #endif
  114.                         switch (dml)
  115.                         {
  116.                             case EnuDMLExecute.Reader:
  117.  
  118.                                 using (DataTable dt = new DataTable())
  119.                                 {
  120.                                     dt.Load(comm.ExecuteReader());
  121.                                     ret = dt;
  122.                                 }
  123.                                 break;
  124.  
  125.                             case EnuDMLExecute.NonQuery:
  126.                                 ret = comm.ExecuteNonQuery();
  127.                                 break;
  128.  
  129.                             case EnuDMLExecute.Scalar:
  130.                                 ret = comm.ExecuteScalar();
  131.                                 break;
  132.  
  133.                             default:
  134.                                 return null;
  135.                         }
  136.  
  137.                     }
  138.                 }
  139.  
  140.                 return ret;
  141.             }
  142.             catch (Exception ex)
  143.             {
  144.                 erro = ex;
  145.                 Debug.WriteLine(ex.Message);
  146.                 return null;
  147.             }
  148.  
  149.         }
  150.  
  151.         /// <summary>
  152.         /// Método que executa a conexão com o banco de dados e retorna, dependendo de <dml>:
  153.         /// - EnuDMLExecute.Reader   => DataTable
  154.         /// - EnuDMLExecute.NonQuery => int
  155.         /// - EnuDMLExecute.Scalar   => objeto
  156.         /// </summary>
  157.         /// <param name="cmd"></param>
  158.         /// <param name="dml"></param>
  159.         /// <param name="tr"></param>
  160.         /// <returns></returns>
  161.         public int InsertRowList(string table, List<object[]> rows, List<DBColumn> cols, out Exception erro)
  162.         {
  163.  
  164.             int rowsAffected = 0;
  165.             string pars;
  166.             string colnames;
  167.  
  168.             try
  169.             {
  170.                 using (SqlConnection cnn = new SqlConnection(GetConnectionString(out erro)))
  171.                 {
  172.                     cnn.Open();
  173.  
  174.                     using (SqlCommand cmd = new SqlCommand("", cnn))
  175.                     {
  176.                         cmd.CommandText = "INSERT INTO " + table + " ";
  177.  
  178.                         colnames = ""; pars = "";
  179.                         cmd.Parameters.Clear();
  180.  
  181.                         for (int i = 0; i < cols.Count; i++)
  182.                         {
  183.                             colnames += cols[i].Name + ",";
  184.                             pars += "@p" + i + ",";
  185.                             cmd.Parameters.Add("@p" + i, cols[i].Type);
  186.                         }
  187.                         colnames = colnames.Substring(0, colnames.Length - 1);
  188.                         pars = pars.Substring(0, pars.Length - 1);
  189.  
  190.                         cmd.CommandText += " (" + colnames + ") VALUES (" + pars + ")";
  191.  
  192.                         cmd.Transaction = cnn.BeginTransaction();
  193.  
  194.                         try
  195.                         {
  196.                             for (int i = 0; i < rows.Count(); i++)
  197.                             {
  198.                                 for (int j = 0; j < rows[i].Count(); j++)
  199.                                 {
  200.                                     switch (cols[j].Type)
  201.                                     {
  202.                                         case SqlDbType.SmallDateTime:
  203.                                         case SqlDbType.Date:
  204.                                             if (DateTime.TryParse(rows[i][j].ToString(), out DateTime result))
  205.                                             {
  206.                                                 if (rows[i][j].ToString() != "00:00:00")
  207.                                                     cmd.Parameters["@p" + j].Value = rows[i][j];
  208.                                             }
  209.                                             else
  210.                                             {
  211.                                                 cmd.Parameters["@p" + j].Value = DBNull.Value;
  212.                                             }
  213.                                             break;
  214.                                         // Inserir novos casos:
  215.                                         // case SqlDbType.???
  216.                                         //  break;
  217.                                         default:
  218.                                             cmd.Parameters["@p" + j].Value = rows[i][j];
  219.                                             break;
  220.                                     }
  221.                                 }
  222.                                 rowsAffected += cmd.ExecuteNonQuery();
  223.                             }
  224.                             cmd.Transaction.Commit();
  225.                         }
  226.                         catch (Exception ex)
  227.                         {
  228.                             rowsAffected = 0;
  229.                             cmd.Transaction.Rollback();
  230.                             erro = ex;
  231.                             Debug.WriteLine(ex.Message);
  232.                         }
  233.                     }
  234.                 }
  235.                 return rowsAffected;
  236.             }
  237.             catch (Exception ex)
  238.             {
  239.                 erro = ex;
  240.                 Debug.WriteLine(ex.Message);
  241.                 return -1;
  242.             }
  243.         }
  244.     }
  245.  
  246.     public class DBColumn
  247.     {
  248.         public string Name { get; set; }
  249.         public SqlDbType Type { get; set; }
  250.         public int Size { get; set; }
  251.         //    public DBColumn() : this("",SqlDbType.VarChar,0) { }
  252.         public DBColumn(string name, SqlDbType type) : this(name, type, 0) { }
  253.         public DBColumn(string name, SqlDbType type, int size)
  254.         {
  255.             Name = name;
  256.             Type = type;
  257.             Size = size;
  258.         }
  259.  
  260.     }
  261.     public enum EnuDMLExecute : int
  262.     {
  263.         Reader = 0,
  264.         NonQuery = 1,
  265.         Scalar = 2
  266.     }
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement