DatabaseService.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using Npgsql;
  5. namespace ComputerShopWpf.Services
  6. {
  7. public class DatabaseService
  8. {
  9. private readonly string _connectionString;
  10. public DatabaseService()
  11. : this(ConnectionSettings.MainConnection)
  12. {
  13. }
  14. public DatabaseService(string connectionString)
  15. {
  16. _connectionString = string.IsNullOrWhiteSpace(connectionString)
  17. ? ConnectionSettings.MainConnection
  18. : connectionString;
  19. }
  20. public DataTable ExecuteSelect(string sql, Dictionary<string, object> parameters = null)
  21. {
  22. using (NpgsqlConnection connection = new NpgsqlConnection(_connectionString))
  23. using (NpgsqlCommand command = CreateCommand(sql, parameters, connection))
  24. using (NpgsqlDataAdapter adapter = new NpgsqlDataAdapter(command))
  25. {
  26. DataTable table = new DataTable();
  27. adapter.Fill(table);
  28. return table;
  29. }
  30. }
  31. public int ExecuteNonQuery(string sql, Dictionary<string, object> parameters = null)
  32. {
  33. using (NpgsqlConnection connection = new NpgsqlConnection(_connectionString))
  34. using (NpgsqlCommand command = CreateCommand(sql, parameters, connection))
  35. {
  36. connection.Open();
  37. return command.ExecuteNonQuery();
  38. }
  39. }
  40. public object ExecuteScalar(string sql, Dictionary<string, object> parameters = null)
  41. {
  42. using (NpgsqlConnection connection = new NpgsqlConnection(_connectionString))
  43. using (NpgsqlCommand command = CreateCommand(sql, parameters, connection))
  44. {
  45. connection.Open();
  46. return command.ExecuteScalar();
  47. }
  48. }
  49. private static NpgsqlCommand CreateCommand(string sql, Dictionary<string, object> parameters, NpgsqlConnection connection)
  50. {
  51. NpgsqlCommand command = new NpgsqlCommand(sql, connection);
  52. if (parameters != null)
  53. {
  54. foreach (KeyValuePair<string, object> item in parameters)
  55. {
  56. string parameterName = item.Key.StartsWith("@", StringComparison.Ordinal)
  57. ? item.Key
  58. : "@" + item.Key;
  59. command.Parameters.AddWithValue(parameterName, item.Value ?? DBNull.Value);
  60. }
  61. }
  62. return command;
  63. }
  64. }
  65. }