Этюды на 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
|