Guilherme's profileGuilherme de Carvalho Ca...PhotosBlogListsMore ![]() | Help |
|
November 22 Cloud computing de forma simples Cloud computing ou computação nas nuvens é a onda da vez, os grandes da TI já aderiram a esta onda, IBM, Google, Microsoft são alguns exemplos de empresas que já adotaram esta nova estrutura de TI, onde os dados ficam em servidores distribuídos e acessíveis via web, veja este vídeo muito legal que apresenta de forma simples o que é Cloud computing. September 09 Apenas para descontrair (Mudei de Lado).MUDEI DE LADO . . . Resolvi ficar ao lado de Lula ... Se eu ficar atrás... Ele me caga. ENTÃO, PENSANDO BEM, CONCLUI QUE QUANDO TUDO VOLTAR AO NORMAL... Será o dia em que: - GENUÍNO será algo verdadeiro; Agora, quando olho meu titulo de eleitor, entendo o verdadeiro significado do nome 'ZONA ELEITORAL' ! September 06 AutoComplete com jQuery e asp.netO objetivo deste post não é determinar qual a melhor abordagem a ser adotada no desenvolvimento de um componente de autocompletar nas aplicações asp.net, mas mostrar uma alternativa ao AutoComplet do Toolkit.
Vamos utilizar o jQuery[1], framework para desenvolvimento com JavaScript e AJAX, fazendo o download do arquivo [2], podemos colocá-lo dentro de uma pasta js na nossa aplicação. Após isto poderemos referenciar o framework na nossa webform, onde queremos implentar tal solução. Por ser um arquivo js basta colocarmos no head do nosso webform o link para o arquivo assim:
<asp:ScriptReference Path="~/jQuery/jquery-1.3.2.js" /> Você pode estar achando estranho a forma com que referenciei o arquivo, mas como estou usando MasterPage, é necessário que a referencia ao arquivo siga este padrão. Esta referência deve ser feita no arquivo da MasterPage. Agora podemos ir para a parte de criação da aplicação que irá fazer a busca no banco de dados para trazer os dados do banco e disponibilizá-los para o componente onde queremos implementar a função de autocomplete, que no nosso caso será um TextBox. Não iremos utilizar um webservice, pois com o uso do jQuery podemos criar esta funcionalidade com uma simples página aspx, bastando para isto criar a função no evento page_load, como mostrado abaixo. Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Expires = -1
Response.ContentType = "text/plain"
Dim txtResposta As New Text.StringBuilder
Dim Dr As Npgsql.NpgsqlDataReader
Dim conPgsql As New NpgsqlConnection(PgConexao.ToString)
Dim comPgsql As New NpgsqlCommand
Dim usuarioLogado As Integer = Request.Cookies("UserID").Value
Try
comPgsql.Connection = conPgsql
conPgsql.Open()
With comPgsql
.CommandType = Data.CommandType.Text
.CommandText = "SELECT CAST(proc.numero AS TEXT) FROM advogaweb.processo proc INNER JOIN advogaweb.advogado_processo advpr ON proc.idprocesso = advpr.fkprocesso WHERE proc.situacao=0 AND advpr.fkadvogado = CAST(:s1 AS Integer)"
.Parameters.Add(New NpgsqlParameter("s1", NpgsqlDbType.Text))
.Parameters(0).Value = usuarioLogado
Dr = .ExecuteReader()
End With
If Dr.HasRows Then
While Dr.Read
txtResposta.Append(Dr(0).ToString)
txtResposta.Append(" ")
End While
txtResposta.Remove(txtResposta.Length - 1, 1)
End If
Catch exPgsql As NpgsqlException
conPgsql.Close()
Catch ex As Exception
conPgsql.Close()
Finally
conPgsql.Close()
End Try
Response.Write(txtResposta.ToString())
Response.End()
End Sub
A função é auto explicativa, bastando prestar atenção em alguns detalhes, como o tipo do retorno que deve ser uma string e tem que ser retornada pelo response.write. Outro ponto que devemos ter atenção é nas primeiras linhas. Response.Expires = -1 Neste caso foi criada uma função para poder aproveitar o máximo a reusabilidade. (function($) {
$.getProcessosAutocomplete = function() {
$.ajax({
url: "../admsistema/jQuery.aspx",
async: false,
success: function(data){
var processos = data.split(" ");
$('.inputProcesso').autocomplete(processos,
{
width:180, highlight: false, multiple: false, scroll: true, scrollHeight: 300, autoFill:true
}
);
}
});
}
})(jQuery);
O segundo parâmetro serve apenas para configurar a exibição do autocomplete, e tais configurações podem ser consultadas na página do autocomplete. July 03 jQuery com asp.net e MasterPageApós alguns problemas com o Toolkit, não tenho nada a reclamar, percebi que precisava de um outro Framework para facilitar o trabalho com AJAX/JavaScript, então após dar uma navegada e ler alguns depoimentos decidi testar o jQuery[1], que realmente é muito lega e fácil de trabalhar, mas quando tentei integrar o jQuery na minha aplicação começaram os problemas e exetamente com o IE. Fui pesquisar novamente e encontrei o que pode ser a solução dos problemas para integrar jQuery+asp.net+MasterPage.
A primeira coisa que descobri foi justamente como gerenciar de forma correta o caminho para os scripts jQuery, pois como tenho a master page fazer a referência utilizando o <script type='text/javascript' src='~/jQuery/jquery.js'></script> gera um erro de referência ao arquivo, então a primeira solução foi trabalhar com o <ScriptManager> adicionando uma entrada chamada <Scripts> que aí dentro desta entrada eu posso chamar a referência ao scripts de forma transparente assim: <asp:ScriptReference Path="~/jQuery/jquery.js" /> trabalhando desta maneira a referência aos arquivos não gera dor de cabeça, o você poderá desfrutar de todas as funcionalidades do jQuery.
Ficando desta maneira o bloco do ScriptManager na MasterPage <ScriptManager ...> <Scripts> <asp:ScriptReference Path="jQuery/jquery.js" /> </Scripts> </ScriptManager> Um outro problema que encontrei foi como fazer a referência aos elementos que eu queria tratar com o jQuery, pois os elementos por estarem dentro de um ContentPlace a referência por nome fica um pouco complicada. Para isto eu trabalhei com o atributo Class para os elementos asp:TextBox e na função do jQuery a ligação com o elemento é feita assim:
$("input[class *= 'txtAutocompletar']").autocomplete(["a", "ab", "abc", "abcd", "abcde", "abcdef"], {
width: 180, max: 5, highlight: false, multiple: false, scroll: true, scrollHeight: 300 }); O que estou fazendo aí é dizendo que qualquer elemento do tipo input que tenha o atributo class com um texto conteudo uma parte dele igual a txtAutocompletar (*=) executará esta função. Vale salientar que a Microsft tem planos de integrar o jQuery ao Visual Studio, para a versão 2008 existe um rotfix[2] e um arquivo[3] para incluir o intellisense do jQuery.
Abraços a todos e bom trabalho
[1] http://jquery.com/ [2] http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736 [3] http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2-vsdoc2.js May 17 A velha batalha entre o JAVA e o Dotnet Como todos dizem "O Java é superior, faz mais coisas, é multiplataforma, etc e tal" bem parecido com o carinha da capoeira no vídeo abaixo, e o DotNET como dizem "É de uma empresa grande, pesada, etc e tal" parecido com o branquinho, que na maior parte do tempo fica quieto sem muitas firulas apenas olhando as piruetas do JAVA, ops! do carinha da capoeira, Mas no final vejam o que acontece. February 06 Lendo arquivo XML com Xpath e XmlDocumentNesta semana me apareceu a necessidade de ler um arquivo XML, e não poderia utilizar DataSet ou DataTable para tal, aí desenvolvi este código para realizar o trabalho, visto que tinha que acessar além dos nós do XML atributos também. O Formato do arquivo XML é algo assim, reduzi o arquivo para melhorar o entendimento: <?xml version="1.0" encoding="utf-8"?>
<itens> <item id="cliente"> <nomecampo><![CDATA[Nome do cliente]]></nomecampo> <valorcampo><![CDATA[#$strnomecli]]></valorcampo> </item> <item id="funcionario"> <nomecampo><![CDATA[Nome do funcionário]]></nomecampo> <valorcampo><![CDATA[#$strnomefunc]]></valorcampo> <nomecampo><![CDATA[Matrícula Funcionário]]></nomecampo> <valorcampo><![CDATA[#$stromatfunc]]></valorcampo> </item> </itens> Abaixo o código que desenvolvi, para tratar estes requisitos: Dim xmlDocumento As XmlDocument = New XmlDocument 'Criando um objeto XmlDocumentDim strCaminho As String = Server.MapPath("~/App_Data/ItensAtributos.xml") 'Criando um objeto String para conter o caminho do arquivo XML xmlDocumento.Load(strCaminho) 'Carregando o arquivo XML para o objeto XmlDocumento Dim navegadorXml As System.Xml.XPath.XPathNavigator = xmlDocumento.CreateNavigator 'Criando um XpathNavigator baseado no xmlDocumento Dim listaCat As New List(Of cl_modelodocumento_dto) 'Criando uma lista genérica, que irá receber os dados da consulta ao Xml Dim itemCat As cl_modelodocumento_dto 'Instanciando um objeto do tipo modelodocumento_dto Dim xmlNo As XmlNode 'Criando um XmlNode Dim xmlListaNomeCampo, xmlListaValorCampo As XmlNodeList 'Criando dos objetos do tipo XmlNodeList, que vão percorrer os nós do Xml Dim strAtributo As String = String.Empty 'Criando uma string que irá receber o conteúdo dos atributos ID dos nós ITEM do arquivo XML, mostrado acima Try For Each xmlNo In xmlDocumento.SelectNodes("/itens/item") 'Percorrendo todos os nós ITEM contidos no arquivo XML itemCat = New cl_modelodocumento_dto 'Criando um novo objeto do tipo modelodocumento_dto With itemCat.titulo = xmlNo.SelectSingleNode("@id").Value.ToString 'Atribuindo o conteudo do atributo ID dos nós ITEM à propriedade titulo do objeto itemCat listaCat.Add(itemCat) 'Adicionando o itemCat à lista genérica de itemCat End With xmlListaNomeCampo = xmlNo.SelectNodes("nomecampo") 'Retornando o conteúdo do nó nomecampo para o xmlNodeList xmlListaNomeCampo xmlListaValorCampo = xmlNo.SelectNodes( "valorcampo") 'Retornando o conteúdo do nó valorcampo para o xmlNodeList xmlListaValorCampo Next Catch ex As Exception End TryEsta é a minha solução que encontrei para o problema, claro que outros desenvolvedores podem achar outras soluções melhores, ou piores de resolverem o problema. Caso você ache uma solução melhor e desejar compartilhar envia como comentário. January 08 Uso correto da tecnologiaQuando utilizada de forma séria e responsável a tecnologia existente pode ser uma forte aliada para todos que necessitem. http://info.abril.uol.com.br/aberto/infonews/012009/08012009-28.shl October 14 Silverlight 2.0 aumenta espaço para participação de desenvolvedoresFramingham - Parceria com projeto open source atrai desenvolvedores do framework Eclipse, e Microsoft abre espaço a quem cria com .Net. O plug-in para navegadores Silverlight 2.0, da Microsoft, que chega ao mercado na próxima terça-feira (14/10), pretende motivar desenvolvedores e designers a interagirem com a plataforma concorrente do Adobe Flash.
August 30 SECOP 2008Encerrou-se na tarde de ontem o SECOP 2208, evento sobre tecnologia para govenos, onde inúmeras tecnologias e softwares foram apresentados na capital Tocantinense.
Tal evento acontece anualmente para tratar do uso da tecnologia nas administrações públicas, o uso da tecnologia por parte dos governos proporciona um ganho de qualidade no serviço prestado como também melhora a transparência do governo, proporcionando à população acesso a informações que antes eram tratadas como segredo de estado. Gostaria de destacar entretanto que apenas uma solução em Dot Net foi apresentada em todo o evento, o que mostra que em se tratando de órgãos públicos o DotNet realmente está totalmente excluído.
Mas de qualquer maneira parabenizo os organizadores pois o evento mostra que os administradores público estão tomando conhecimento que a TI não é um setor gerador de custos, mas sim um redutor de trabalho desnecessário e que gera uma grande melhoria no serviço prestado para a população.
Espero que num futuro próximo no Image Cup possamos ver uma competição sobre o assunto. July 21 AcessibilidadeNum mundo onde o conhecimento é a principal arma para ganhar mercado, a acessibilidade torna-se uma ferramenta indispensável para o bom desempenho do seu site ou sistema, você já imaginou o seu sistema excluir sem nenhum aviso determinada clientela?
Isto mesmo, por mero descuido ou falta de conhecimento desenvolvemos sistes e sistemas que impedem, o acesso de determinados usuários ao sistema. A simples falta de elementos, ALT e/ou TITLE em determinadas tags, impedem o acesso por deficientes visuais, que utilizam softwares que fazem a leitura dos elementos apresentados na tela.
A deficiência não necessariamente tem que ser permante, o que em muitos casos torna o impacto do não acesso mais prejudicial ainda. Em determinada situação, meu irmão que é cadeirante me envio um link de um site de venda de materiais para deficientes físicos, para que eu desse uma olhada, o site realmente é muito interessante, e vende todo tipo de produto para todas as deficiências que eu tenho conhecimento. Mas logo percebi que a mais simples das regras de acessibilidade que é trabalhar com elementos que possam ser lidos por programas leitores de telas não está presente no site. O primeiro e maior elemento que encontrei na tela foi uma animação em flash que no meu caso aparentou ser o elemento mais importante do site, até mesmo mais importante que os ítens à venda.
Este é apenas um simples exemplo onde a adoção de tecnologias não condizentes com os objetivos do site torna o acesso impossível para o seu maior alvo que neste caso são os deficientes físicos.
Creio que a acessibilidade logo em breve será um divisor entre as empresas que entendem que a internet é um canal com o público alvo, e as outras empresas que acham que o mais importante é ter a animação em flash mais bonita e com mais efeitos piro-técnicos.
May 04 Class Library para acesso ao PostgreSQL. - Parte 3Nesta última parte do post sobre acesso ao PostgreSQL trago as funções de adição dos parâmetros dos tipos possíveis no PostgreSQL.
Public Function criar_parametro_text(ByVal str_chave As String, ByVal par_valor As String) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Text PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_decimal(ByVal str_chave As String, ByVal par_valor As Decimal) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Numeric PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_double(ByVal str_chave As String, ByVal par_valor As Double) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Double PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_datetime(ByVal str_chave As String, ByVal par_valor As DateTime) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Timestamp PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_bytea(ByVal str_chave As String, ByVal par_valor As Byte()) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Bytea PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_char(ByVal str_chave As String, ByVal par_valor As Char) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Char PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_booleano(ByVal str_chave As String, ByVal par_valor As Boolean) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Boolean PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_inteirogrande(ByVal str_chave As String, ByVal par_valor As Integer) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Bigint PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_inteiro(ByVal str_chave As String, ByVal par_valor As Int16) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Integer PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_string(ByVal str_chave As String, ByVal par_valor As String) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Varchar PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function
Public Function criar_parametro_ip(ByVal str_chave As String, ByVal par_valor As System.Net.IPAddress) As NpgsqlCommand Dim TipoParametro As New NpgsqlDbType PgParametro = New NpgsqlParameter() Try PgParametro.ParameterName = str_chave PgParametro.NpgsqlDbType = NpgsqlDbType.Inet PgParametro.Value = par_valor PgComando.Parameters.Add(PgParametro) Catch ex As NpgsqlException Call Me.fechar_conexao() End Try Return PgComando End Function Class Library para acesso ao PostgreSQL. - Parte 2Nesta segunda parte do post sobre a Class Library estou tratando de funções para retornar DataSet, DataTable, DataTableReader e trambém uma função para gravar numa tabela na base os erros na hora de criar/executar funções de acesso ao PostgreSQL.
''' <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 ''' <summary> ''' Sub para gravar na tabela log_erro os erros na hora de construir ou executar os comandos de acesso ao PostgreSQL ''' </summary> ''' <param name="par_str_erro">Nome da excessão que disparou o erro</param> ''' <param name="par_str_chamada">Função / Sub que disparou o erro</param> ''' <remarks></remarks> Private Sub sb_erro_npgsql(ByVal par_str_erro As String, ByVal par_str_chamada As String) Dim Erro As String = par_str_erro Dim Chamada As String = par_str_chamada Dim i As Integer Call Me.criar_comando("INSERT INTO advogaweb.log_erro (mensagem, pagina) VALUES (:mensagem,:pagina)", "server=localhost;port=5432;user id=postgres;password=postgres;database=ADVOGAWEB") Call Me.criar_parametro_string("mensagem", par_str_erro) Call Me.criar_parametro_string("pagina", par_str_chamada) i = Me.executar_insertupdatedelete() End Sub Class Library para acesso ao PostgreSQL. - Parte 1Neste classe que estou desenvolvendo para acesso ao postgreSQL, estou percebendo um problema pelo Process Explorer que o processo postgres.exe aparece inúmeras vezes, tipo umas 46 vezes, mas percebo também que isto acontece quando estou usando o programa EMS PostgreSQL, de qualquer forma estou publicando este post para compartilhar o conhecimento e quem sabe melhorarmos em conjunto, com aqueles que compartilharem seus conhecimentos, e criarmos uma classe que resolva todos os processos de conexção com o PostgreSQL.
Este post é dividido em 3 por causa do tamanho. Na segunda parte estou postando as funções de execuções para retornar DataSet, DataTable, e uma Sub para gravar numa tabela no banco os erros gerados pela classe.
Imports Microsoft.VisualBasic Imports Npgsql Imports NpgsqlTypes Imports System.Data
Public Class ClPgDAL
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 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
Call Me.sb_erro_npgsql(ex.Message, "Parametro Ip")
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
Call Me.sb_erro_npgsql(ex.Message, "Erro no execute Scalar")
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
Call Me.sb_erro_npgsql(ex.Message, "Erro no retorno do DataReader")
Finally
Call Me.fechar_conexao()
End Try
Return PgDataReader
End Function
End Class February 25 Artigo sobre .net 3.5Vídeo muito interessante sobre algumas novas funcionalidades do .net 3.5
Abraços. February 17 FériasBom pessoal desculpem a ausência, mas estou de férias, volto dia 3 de Março. Abraços. November 28 A tela azul modou de cor ?Parece mais uma saga do problema do windows, mas...Só acontece comigo mesmo. Segunda-feira, dia chuvoso e preguiçoso, tenho uma matéria para entregar e passo o dia inteiro lutando contra o editor de textos. Sabe aqueles dias em que você tem algo para fazer, sabe como, normalmente é capaz de fazer com uma mão nas costas mas de repente simplesmente não consegue? Pois é, hoje era o meu dia ....
Veja o resto do artigo no link a seguir [http://rigues.badcoffee.info/?p=284]
November 25 Codificação para e-mailPara evitar problemas de caracteres "estranhos", configuramos o charset para "ISO-8859-1" Determinando a codificação para o assunto objEmail.SubjectEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1") Determinando a codificação para o corpo da mensagem objEmail.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1") November 23 Classes de Acesso - MySQLGalera vou começar uma série de artigos sobre o desenvolvimento de classes de acesso a bases de dados, irei postar aqui classes para acesso ao MySql (Este post), depois tratarei do PostgreSql e por fim do FireBird.
Importando os namespaces necessários. Imports System Imports System.Data Imports MySql.Data.MySqlClient Namespace CamadaDados
End Namespace
|
|
|