Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

asp.net

Class Libray de acesso ao PostgreSQL.

Recommended Posts

Boa noite.

 

Estou tentando desenvolver uma class libray para acesso ao PostgreSQL, como mostrado no código a seguir:

Imports Npgsql
Imports NpgsqlTypes
Imports System.Data

Public Class PostgresqlDAL
	Private PgConexao As NpgsqlConnection
	Private PgComando As NpgsqlCommand
	Private PgParametro As NpgsqlParameter
	Private PgAdaptador As NpgsqlDataAdapter
	Private PgTransacao As NpgsqlTransaction
	Private PgDataReader As NpgsqlDataReader
	Private Ds As DataSet
	Private Dt As DataTable
	Private Dtr As DataTableReader

	''' <summary>
	''' Fuñção interna para criar a conexão
	''' </summary>
	''' <param name="str_conexao">String da conexão</param>
	''' <returns>Conexão</returns>
	''' <remarks></remarks>
	Private Function cria_conexao(ByVal str_conexao As String) As NpgsqlConnection
		PgConexao = New NpgsqlConnection(str_conexao)
		Return PgConexao
	End Function

	''' <summary>
	''' Função interna para abrir a conexão no último momento
	''' </summary>
	''' <returns>Conexão</returns>
	''' <remarks></remarks>
	Private Function abrir_conexao() As NpgsqlConnection
		PgConexao.Open()
		Return PgConexao
	End Function

	''' <summary>
	''' Função para fechar a conexão aberta
	''' </summary>
	''' <remarks></remarks>
	Public Sub fechar_conexao()
		If PgConexao.State = ConnectionState.Open Then
			PgConexao.Close()
		End If
	End Sub

	''' <summary>
	''' Função para criar o comando Sql a ser executado
	''' </summary>
	''' <param name="str_comando">String com o comando a ser executado</param>
	''' <param name="str_conexao">String com a conexão</param>
	''' <returns>Comando SQl</returns>
	''' <remarks></remarks>
	Public Function criar_comando(ByVal str_comando As String, ByVal str_conexao As String) As NpgsqlCommand
		PgComando = New NpgsqlCommand(str_comando, cria_conexao(str_conexao))
		PgComando.CommandType = CommandType.Text
		PgComando.CommandTimeout = 60
		Return PgComando
	End Function

	''' <summary>
	''' Função para criar os parametros para execução do comando Sql
	''' </summary>
	''' <param name="str_chave">Nome do parâmetro</param>
	''' <param name="str_valor">Valor do parâmetro</param>
	''' <param name="int_tipo">Tipo do parâmetro: 1 - Varchar, 2 - Inteiro, 3 - Inteiro Grande, 4 - Booleano, 5 - Char, 6 - Bytea, 7 - Data, 8 - Double, 9 - Endereço Ip, 10 - Numérico, 11 - Real, 12 - Texto, 13 - Time, 14 - TimeStamp </param>
	''' <returns>Comando SQl</returns>
	''' <remarks></remarks>
	[b]Public Function criar_parametro(ByVal str_chave As String, ByVal str_valor As String, ByVal int_tipo As Integer) As NpgsqlCommand
		Dim TipoParametro As New NpgsqlDbType
		PgParametro = New NpgsqlParameter()
		Try
			Select Case int_tipo
				Case 1 'Varchar
					TipoParametro = NpgsqlDbType.Varchar
				Case 2 'Inteiro
					TipoParametro = NpgsqlDbType.Integer
				Case 3 'Inteiro Grande
					TipoParametro = NpgsqlDbType.Bigint
				Case 4 'Boolean
					TipoParametro = NpgsqlDbType.Boolean
				Case 5 'Char
					TipoParametro = NpgsqlDbType.Char
				Case 6 'Bytea
					TipoParametro = NpgsqlDbType.Bytea
				Case 7 'Data
					TipoParametro = NpgsqlDbType.Date
				Case 8 'Double
					TipoParametro = NpgsqlDbType.Double
				Case 9 'Endereço IP
					TipoParametro = NpgsqlDbType.Inet
				Case 10 'Numérico
					TipoParametro = NpgsqlDbType.Numeric
				Case 11 'Real
					TipoParametro = NpgsqlDbType.Real
				Case 12 'Texto
					TipoParametro = NpgsqlDbType.Text
				Case 13 'Time
					TipoParametro = NpgsqlDbType.Time
				Case 14 'TimeStamp, Data e Hora
					TipoParametro = NpgsqlDbType.Timestamp
			End Select
			PgParametro.ParameterName = str_chave.ToString
			PgParametro.NpgsqlDbType = TipoParametro
			PgParametro.Value = str_valor
			PgComando.Parameters.Add(PgParametro)
		Catch ex As Exception
			Call Me.fechar_conexao()
		End Try
		Return PgComando
	End Function[/b]
	''' <summary>
	''' Função para executar comandos de inserção, deleção, atualização
	''' </summary>
	''' <returns>Inteiro com a quantidade de registros afetados pela execução</returns>
	''' <remarks></remarks>
	Public Function executar_insertupdatedelete() As Integer
		Dim i As Integer = 0
		Try
			Call Me.abrir_conexao()
			i = PgComando.ExecuteNonQuery
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return i
	End Function

	''' <summary>
	''' Função para executar comandos que retornem apenas um registro
	''' </summary>
	''' <returns>String com o resultado da execução do comando SQL</returns>
	''' <remarks></remarks>
	Public Function executar_escalar() As String
		Dim str_resultado As String = ""
		Try
			Call Me.abrir_conexao()
			str_resultado = CType(PgComando.ExecuteScalar, String)
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return str_resultado
	End Function

	''' <summary>
	''' Função para executar comandos que retornem objetos do tipo DataReader
	''' </summary>
	''' <returns>NpgsqlDataReader</returns>
	''' <remarks></remarks>
	Public Function retornar_datareader() As NpgsqlDataReader
		Try
			Call Me.abrir_conexao()
			PgDataReader = PgComando.ExecuteReader
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return PgDataReader
	End Function

	''' <summary>
	''' Função para executar comandos que retornem objetos do tipo DataSet
	''' </summary>
	''' <returns>DataSet</returns>
	''' <remarks></remarks>
	Public Function retornar_dataset() As DataSet
		Ds = New Data.DataSet
		Try
			Call Me.abrir_conexao()
			PgAdaptador = New NpgsqlDataAdapter(PgComando)
			PgAdaptador.Fill(Ds)
		Catch ex As Exception
		Finally
			Call Me.fechar_conexao()
		End Try
		Return Ds
	End Function

	''' <summary>
	''' Função para executar comandos que retornem objetos do tipo DataTable
	''' </summary>
	''' <param name="str_tabela">Nome a ser dado ao objeto DataTable</param>
	''' <returns>DataTable</returns>
	''' <remarks></remarks>
	Public Function retornar_datatable(ByVal str_tabela As String) As DataTable
		Dt = New DataTable(str_tabela)
		Try
			Call Me.abrir_conexao()
			PgAdaptador = New NpgsqlDataAdapter(PgComando)
			PgAdaptador.Fill(Dt)
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return Dt
	End Function

	''' <summary>
	''' Função para executar comandos que retornem objetos do tipo DataTableReader
	''' </summary>
	''' <param name="str_tabela">Nome a ser dado ao objeto DataTableReader</param>
	''' <returns>DataTableReader</returns>
	''' <remarks></remarks>
	Public Function retornar_datatablereader(ByVal str_tabela As String) As DataTableReader
		Try
			Call Me.abrir_conexao()
			PgAdaptador = New NpgsqlDataAdapter(PgComando)
			Dt = New DataTable(str_tabela)
			PgAdaptador.Fill(Dt)
			Dtr = Dt.CreateDataReader
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return Dtr
	End Function

End Class
Entretanto na hora de adicionar parâmetros ao comando Sql, ele não efetua a adição dos parâmetros e nem gera erro nenhum,gostaria portanto de contar com a ajuda de vocês.

 

Quando eu vou chamar a função eu faço assim:

With PgSql
			Try
				.criar_comando("INSERT INTO advogaweb.log_sistema(fkusuario, descricao, ip) VALUES(:=usuario, :=descricao, :=ip)", PgConexao)
				.criar_parametro("usuario", par_int_usuario, 2)
				.criar_parametro("descricao", par_str_log.ToString, 1)
				.criar_parametro("ip", "192.168.1.8", 9)
				h = .executar_insertupdatedelete
			Catch ex As Npgsql.NpgsqlException
				str = ex.Message
			End Try
		End With

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite.

Mas no caso estou fazendo isto apenas para saber se ele tem gerado algum erro. Fiz isto apenas para adicionar um Break Point. Estou desconfiado que o problema seja na hora de adicionar os parâmetros, porque se eu der um comando tipo Seletc sem usar claúsula where ele retorna tranquilo os registros.

 

 

Estou tentando desenvolver uma class libray para acesso ao PostgreSQL, como mostrado no código a seguir:

Imports Npgsql
Imports NpgsqlTypes
Imports System.Data

Public Class PostgresqlDAL
	Private PgConexao As NpgsqlConnection
	Private PgComando As NpgsqlCommand
	Private PgParametro As NpgsqlParameter
	Private PgAdaptador As NpgsqlDataAdapter
	Private PgTransacao As NpgsqlTransaction
	Private PgDataReader As NpgsqlDataReader
	Private Ds As DataSet
	Private Dt As DataTable
	Private Dtr As DataTableReader

	''' <summary>
	''' Fuñção interna para criar a conexão
	''' </summary>
	''' <param name="str_conexao">String da conexão</param>
	''' <returns>Conexão</returns>
	''' <remarks></remarks>
	Private Function cria_conexao(ByVal str_conexao As String) As NpgsqlConnection
		PgConexao = New NpgsqlConnection(str_conexao)
		Return PgConexao
	End Function

	''' <summary>
	''' Função interna para abrir a conexão no último momento
	''' </summary>
	''' <returns>Conexão</returns>
	''' <remarks></remarks>
	Private Function abrir_conexao() As NpgsqlConnection
		PgConexao.Open()
		Return PgConexao
	End Function

	''' <summary>
	''' Função para fechar a conexão aberta
	''' </summary>
	''' <remarks></remarks>
	Public Sub fechar_conexao()
		If PgConexao.State = ConnectionState.Open Then
			PgConexao.Close()
		End If
	End Sub

	''' <summary>
	''' Função para criar o comando Sql a ser executado
	''' </summary>
	''' <param name="str_comando">String com o comando a ser executado</param>
	''' <param name="str_conexao">String com a conexão</param>
	''' <returns>Comando SQl</returns>
	''' <remarks></remarks>
	Public Function criar_comando(ByVal str_comando As String, ByVal str_conexao As String) As NpgsqlCommand
		PgComando = New NpgsqlCommand(str_comando, cria_conexao(str_conexao))
		PgComando.CommandType = CommandType.Text
		PgComando.CommandTimeout = 60
		Return PgComando
	End Function

	''' <summary>
	''' Função para criar os parametros para execução do comando Sql
	''' </summary>
	''' <param name="str_chave">Nome do parâmetro</param>
	''' <param name="str_valor">Valor do parâmetro</param>
	''' <param name="int_tipo">Tipo do parâmetro: 1 - Varchar, 2 - Inteiro, 3 - Inteiro Grande, 4 - Booleano, 5 - Char, 6 - Bytea, 7 - Data, 8 - Double, 9 - Endereço Ip, 10 - Numérico, 11 - Real, 12 - Texto, 13 - Time, 14 - TimeStamp </param>
	''' <returns>Comando SQl</returns>
	''' <remarks></remarks>
	[b]Public Function criar_parametro(ByVal str_chave As String, ByVal str_valor As String, ByVal int_tipo As Integer) As NpgsqlCommand
		Dim TipoParametro As New NpgsqlDbType
		PgParametro = New NpgsqlParameter()
		Try
			Select Case int_tipo
				Case 1 'Varchar
					TipoParametro = NpgsqlDbType.Varchar
				Case 2 'Inteiro
					TipoParametro = NpgsqlDbType.Integer
				Case 3 'Inteiro Grande
					TipoParametro = NpgsqlDbType.Bigint
				Case 4 'Boolean
					TipoParametro = NpgsqlDbType.Boolean
				Case 5 'Char
					TipoParametro = NpgsqlDbType.Char
				Case 6 'Bytea
					TipoParametro = NpgsqlDbType.Bytea
				Case 7 'Data
					TipoParametro = NpgsqlDbType.Date
				Case 8 'Double
					TipoParametro = NpgsqlDbType.Double
				Case 9 'Endereço IP
					TipoParametro = NpgsqlDbType.Inet
				Case 10 'Numérico
					TipoParametro = NpgsqlDbType.Numeric
				Case 11 'Real
					TipoParametro = NpgsqlDbType.Real
				Case 12 'Texto
					TipoParametro = NpgsqlDbType.Text
				Case 13 'Time
					TipoParametro = NpgsqlDbType.Time
				Case 14 'TimeStamp, Data e Hora
					TipoParametro = NpgsqlDbType.Timestamp
			End Select
			PgParametro.ParameterName = str_chave.ToString
			PgParametro.NpgsqlDbType = TipoParametro
			PgParametro.Value = str_valor
			PgComando.Parameters.Add(PgParametro)
		Catch ex As Exception
			Call Me.fechar_conexao()
		End Try
		Return PgComando
	End Function[/b]
	''' <summary>
	''' Função para executar comandos de inserção, deleção, atualização
	''' </summary>
	''' <returns>Inteiro com a quantidade de registros afetados pela execução</returns>
	''' <remarks></remarks>
	Public Function executar_insertupdatedelete() As Integer
		Dim i As Integer = 0
		Try
			Call Me.abrir_conexao()
			i = PgComando.ExecuteNonQuery
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return i
	End Function

	''' <summary>
	''' Função para executar comandos que retornem apenas um registro
	''' </summary>
	''' <returns>String com o resultado da execução do comando SQL</returns>
	''' <remarks></remarks>
	Public Function executar_escalar() As String
		Dim str_resultado As String = ""
		Try
			Call Me.abrir_conexao()
			str_resultado = CType(PgComando.ExecuteScalar, String)
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return str_resultado
	End Function

	''' <summary>
	''' Função para executar comandos que retornem objetos do tipo DataReader
	''' </summary>
	''' <returns>NpgsqlDataReader</returns>
	''' <remarks></remarks>
	Public Function retornar_datareader() As NpgsqlDataReader
		Try
			Call Me.abrir_conexao()
			PgDataReader = PgComando.ExecuteReader
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return PgDataReader
	End Function

	''' <summary>
	''' Função para executar comandos que retornem objetos do tipo DataSet
	''' </summary>
	''' <returns>DataSet</returns>
	''' <remarks></remarks>
	Public Function retornar_dataset() As DataSet
		Ds = New Data.DataSet
		Try
			Call Me.abrir_conexao()
			PgAdaptador = New NpgsqlDataAdapter(PgComando)
			PgAdaptador.Fill(Ds)
		Catch ex As Exception
		Finally
			Call Me.fechar_conexao()
		End Try
		Return Ds
	End Function

	''' <summary>
	''' Função para executar comandos que retornem objetos do tipo DataTable
	''' </summary>
	''' <param name="str_tabela">Nome a ser dado ao objeto DataTable</param>
	''' <returns>DataTable</returns>
	''' <remarks></remarks>
	Public Function retornar_datatable(ByVal str_tabela As String) As DataTable
		Dt = New DataTable(str_tabela)
		Try
			Call Me.abrir_conexao()
			PgAdaptador = New NpgsqlDataAdapter(PgComando)
			PgAdaptador.Fill(Dt)
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return Dt
	End Function

	''' <summary>
	''' Função para executar comandos que retornem objetos do tipo DataTableReader
	''' </summary>
	''' <param name="str_tabela">Nome a ser dado ao objeto DataTableReader</param>
	''' <returns>DataTableReader</returns>
	''' <remarks></remarks>
	Public Function retornar_datatablereader(ByVal str_tabela As String) As DataTableReader
		Try
			Call Me.abrir_conexao()
			PgAdaptador = New NpgsqlDataAdapter(PgComando)
			Dt = New DataTable(str_tabela)
			PgAdaptador.Fill(Dt)
			Dtr = Dt.CreateDataReader
		Catch ex As Exception

		Finally
			Call Me.fechar_conexao()
		End Try
		Return Dtr
	End Function

End Class
Entretanto na hora de adicionar parâmetros ao comando Sql, ele não efetua a adição dos parâmetros e nem gera erro nenhum,gostaria portanto de contar com a ajuda de vocês.

 

Quando eu vou chamar a função eu faço assim:

With PgSql
			Try
				.criar_comando("INSERT INTO advogaweb.log_sistema(fkusuario, descricao, ip) VALUES(:=usuario, :=descricao, :=ip)", PgConexao)
				.criar_parametro("usuario", par_int_usuario, 2)
				.criar_parametro("descricao", par_str_log.ToString, 1)
				.criar_parametro("ip", "192.168.1.8", 9)
				h = .executar_insertupdatedelete
			Catch ex As Npgsql.NpgsqlException
				str = ex.Message
			End Try
		End With

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso eu tinha dito apenas que aquela string era para trabalhar com um Breakpoint. No caso eu consegui resolver o problema de adicionar parâmetros, mas no caso do tipo de parâmetro Inet, que é o campo no Postgresql para gravar endereços IP eu não estou conseguindo pegar o endereço IP do usuário logado no sistema e converter para este tipo de parâmetro.

 

Como eu posso pegar o endereço Ip do usuário logado e converté-lo para este tipo, que creio eu seria no .net System.Net.IPAddresses

 

Depois que eu terminar a ClassLibrary posso compartilhar com o fórum de .Net para melhorarmos tal código e quem sabe criarmos uma rede de geração de códigos aqui no Brasil, e num futuro termos um CodePlex 100% Brazil.

 

Não entendi seu último post.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso como eu posso pegar o endereço IP do usuário em Asp.Net? Estou usando Vb.Net

 

Mas você esta tentando gravar este ip pelo .net ou pelo próprio banco?

Pois se for pelo asp.net você poderia criar o campo como varchar mesmo, acho que seria mais fácil.

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.