Этюды на ASP.NET. Пример сайта на СУБД PostgreSQL

Для удобства работы с PostgreSQL я сделал крошечную обвязочку, закрывающую ридер (если я забыл его закрыть в основном коде) и считывающую строку коннекта из конфига (чтобы не вспоминать имени строки коннекта). Кроме того она восстанавливает коннект при потере связи с СУБД и также в эту обвязку я позже собирался дописать обработку ошибок коннекта. Я откомпилировал этот крошечный класс, уложил его в библиотечку PG1 и просто ставлю ссылки на этот класс на своих сайтах.


   1:  ''' <summary>
   2:  ''' Внешний интерфейс, обращение
   3:  ''' Dim RDR As Npgsql.NpgsqlDataReader = PG.ExecRDR(CMD1)
   4:  ''' </summary>
   5:  Public Class SQL_Postgres
   6:      Dim _PG As Postgres
   7:      Public ReadOnly Property PG() As Postgres
   8:          Get
   9:              Return _PG
  10:          End Get
  11:      End Property
  12:   
  13:      Dim _PG_CN As Npgsql.NpgsqlConnection
  14:      Public ReadOnly Property PG_CN() As Npgsql.NpgsqlConnection
  15:          Get
  16:              Return _PG_CN
  17:          End Get
  18:      End Property
  19:   
  20:      Public Sub New()
  21:          Try
  22:              _PG = New Postgres
  23:              _PG_CN = _PG.Open(Configuration.ConfigurationManager.ConnectionStrings("SQLServer_ConnectionStrings").ConnectionString)
  24:          Catch ex As Exception
  25:              Throw New Exception(ex.Message)
  26:          End Try
  27:      End Sub
  28:   
  29:      Sub CheckConnect()
  30:          Try
  31:              If _PG_CN Is Nothing Then
  32:                  _PG = New Postgres
  33:                  _PG_CN = _PG.Open(Configuration.ConfigurationManager.ConnectionStrings("SQLServer_ConnectionStrings").ConnectionString)
  34:              Else
  35:                  If PG_CN.FullState = Data.ConnectionState.Open Then
  36:                      'отлично, работаем дальше
  37:                  ElseIf PG_CN.FullState = Data.ConnectionState.Closed Then
  38:                      _PG_CN = _PG.Open(Configuration.ConfigurationManager.ConnectionStrings("SQLServer_ConnectionStrings").ConnectionString)
  39:                  ElseIf PG_CN.FullState = Data.ConnectionState.Broken Then
  40:                      Throw New Exception("ConnectionState=Broken")
  41:                  ElseIf PG_CN.FullState = Data.ConnectionState.Connecting Then
  42:                      Throw New Exception("ConnectionState=Connecting")
  43:                  ElseIf PG_CN.FullState = Data.ConnectionState.Executing Then
  44:                      Throw New Exception("ConnectionState=Executing")
  45:                  ElseIf PG_CN.FullState = Data.ConnectionState.Fetching Then
  46:                      Throw New Exception("ConnectionState=Fetching")
  47:                  End If
  48:              End If
  49:          Catch ex As Exception
  50:              Throw New Exception(ex.Message)
  51:          End Try
  52:      End Sub
  53:   
  54:      Public Sub Close()
  55:          Try
  56:              If _PG IsNot Nothing Then
  57:                  _PG.Close()
  58:              End If
  59:          Catch ex As Exception
  60:              'молча
  61:          End Try
  62:      End Sub
  63:  End Class
  64:   
  65:   
  66:  ''' <summary>
  67:  ''' Внутренний класс
  68:  ''' </summary>
  69:  Public Class Postgres
  70:   
  71:      Dim CN1 As Npgsql.NpgsqlConnection
  72:      Dim CMD1 As Npgsql.NpgsqlCommand
  73:      Dim RDR1 As Npgsql.NpgsqlDataReader
  74:   
  75:      Function Open(ByVal ConnectionString As String) As Npgsql.NpgsqlConnection
  76:          Try
  77:              If CN1 Is Nothing Then
  78:                  CN1 = New Npgsql.NpgsqlConnection(ConnectionString)
  79:                  CN1.Open()
  80:              Else
  81:                  If CN1.FullState = Data.ConnectionState.Open Then
  82:                      'отлично, работаем дальше
  83:                  ElseIf CN1.FullState = Data.ConnectionState.Closed Then
  84:                      CN1.Open()
  85:                  ElseIf CN1.FullState = Data.ConnectionState.Broken Then
  86:                      Throw New Exception("ConnectionState=Broken")
  87:                  ElseIf CN1.FullState = Data.ConnectionState.Connecting Then
  88:                      Throw New Exception("ConnectionState=Connecting")
  89:                  ElseIf CN1.FullState = Data.ConnectionState.Executing Then
  90:                      Throw New Exception("ConnectionState=Executing")
  91:                  ElseIf CN1.FullState = Data.ConnectionState.Fetching Then
  92:                      Throw New Exception("ConnectionState=Fetching")
  93:                  End If
  94:              End If
  95:              Return CN1
  96:          Catch ex As Exception
  97:              MsgBox(ex.Message)
  98:          End Try
  99:      End Function
 100:   
 101:      Function ExecScalar(ByVal CMD As String) As Integer
 102:          If CMD1 Is Nothing Then
 103:              CMD1 = New Npgsql.NpgsqlCommand(CMD, CN1)
 104:          Else
 105:              'команда уже есть - есть ли в ней открытый ридер
 106:              If RDR1 IsNot Nothing Then
 107:                  RDR1.Close()
 108:              End If
 109:              'теперь новая команда
 110:              CMD1.CommandText = CMD
 111:          End If
 112:          RDR1 = CMD1.ExecuteReader
 113:          If RDR1.Read Then
 114:              Return RDR1(0)
 115:          End If
 116:      End Function
 117:   
 118:      Function ExecRDR(ByVal CMD As String) As Npgsql.NpgsqlDataReader
 119:          If CMD1 Is Nothing Then
 120:              CMD1 = New Npgsql.NpgsqlCommand(CMD, CN1)
 121:          Else
 122:              'команда уже есть - есть ли в ней открытый ридер
 123:              If RDR1 IsNot Nothing Then
 124:                  RDR1.Close()
 125:              End If
 126:              'теперь новая команда
 127:              CMD1.CommandText = CMD
 128:          End If
 129:          RDR1 = CMD1.ExecuteReader
 130:          Return RDR1
 131:      End Function
 132:   
 133:      Sub Close()
 134:          If CN1 IsNot Nothing Then
 135:              CN1.Close()
 136:          End If
 137:      End Sub
 138:  End Class



Comments ( )
Link to this page: //www.vb-net.com/PostgreSQL_AspNet/pg_wrapper.htm
< THANKS ME>