<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6324589214551143169</id><updated>2011-07-31T06:57:26.830+01:00</updated><title type='text'>ceptrus Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ceptrus.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6324589214551143169/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ceptrus.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ceptrus</name><uri>http://www.blogger.com/profile/05322873520027493463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6324589214551143169.post-2338906671965540056</id><published>2009-10-09T23:59:00.051+01:00</published><updated>2010-10-31T18:55:40.303Z</updated><title type='text'>Biblioteca BaseDados .NET</title><content type='html'>Bem, depois de fazer algum software usando base de dados cheguei à conclusão que era mais interessante desenvolver uma biblioteca para trabalhar directamente sobre as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;BDs&lt;/span&gt;&lt;/span&gt; e deixar de ter uma &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;class&lt;/span&gt;&lt;/span&gt; por cada software que desenvolvo para isso.&lt;br /&gt;&lt;br /&gt;Deste modo comecei um projecto, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;BaseDados&lt;/span&gt;&lt;/span&gt;, que consiste numa biblioteca para acesso, de forma muito &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;facil&lt;/span&gt;&lt;/span&gt;, a alguns tipos de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;BDs&lt;/span&gt;&lt;/span&gt; mais comuns.&lt;br /&gt;&lt;br /&gt;Neste momento, e apesar de ainda estar em desenvolvimento, já suporta:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;Access&lt;/span&gt;&lt;/span&gt; (incluindo a versão 2007)&lt;/li&gt;&lt;li&gt;MySQL&lt;/li&gt;&lt;li&gt;Microsoft SQL &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;Server&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Qualquer ligação por &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;OLEDB&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;e é compativel com a versão 2.0 da FrameWork .NET. Faço ainda intenções de implementar mais alguns tipos diferentes de acesso a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;BDs&lt;/span&gt;&lt;/span&gt;, como por exemplo, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;Oracle&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Modo de funcionamento.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Depois de adicionar a referencia para a biblioteca (apenas o ficheiro BaseDados.dll):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EmNQ9qPMjMM/Ss_D0q2olPI/AAAAAAAAAAM/9Ri41JDjlFs/s1600-h/add_reference.JPG"&gt;&lt;img style="cursor: pointer; width: 230px; height: 271px;" src="http://4.bp.blogspot.com/_EmNQ9qPMjMM/Ss_D0q2olPI/AAAAAAAAAAM/9Ri41JDjlFs/s320/add_reference.JPG" alt="" id="BLOGGER_PHOTO_ID_5390742588609828082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;teremos que dizer que tipo de BD nos queremos ligar.&lt;br /&gt;Para isso, talvez o mais correcto, seja na função &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;main&lt;/span&gt;&lt;/span&gt;() do programa acrescentar:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; BaseDadosLib;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 153, 255);"&gt;Main&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255); margin-left: 15px;"&gt;public void&lt;/span&gt; main() {&lt;br /&gt;&lt;span style="color: rgb(0, 153, 255); margin-left: 30px;"&gt;MySQL&lt;/span&gt;.setInstance(&lt;span style="color: rgb(153, 0, 51);"&gt;"127.0.0.1"&lt;/span&gt;, &lt;span style="color: rgb(153, 0, 51);"&gt;"bd"&lt;/span&gt;, &lt;span style="color: rgb(153, 0, 51);"&gt;"user_name"&lt;/span&gt;, &lt;span style="color: rgb(153, 0, 51);"&gt;"password"&lt;/span&gt;);&lt;br /&gt;&lt;span style="margin-left: 15px;"&gt;}&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Desta forma definimos a nossa ligação a uma BD em MySQL; Agora sempre que necessário aceder à BD:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt; BaseDadosLib;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 153, 255);"&gt;MyClass&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: rgb(0, 153, 255); margin-left: 15px;"&gt;BaseDados &lt;/span&gt;bd = &lt;span style="color: rgb(0, 153, 255);"&gt;MySQL&lt;/span&gt;.getInstance();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 255); margin-left: 15px;"&gt;private void&lt;/span&gt; my_func() {&lt;br /&gt;&lt;span style="margin-left: 30px;"&gt;textBox1.Text = bd.SQLString(&lt;span style="color: rgb(153, 0, 51);"&gt;"SELECT campo1 FROM tabela1"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="margin-left: 15px;"&gt;}&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;&lt;br /&gt;&lt;br /&gt;Funções.&lt;/span&gt;&lt;br /&gt;A biblioteca está, como referido anteriormente, dividida em:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;BaseDadosLib&lt;/span&gt;.MSSQL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;BaseDadosLib&lt;/span&gt;.MySQL&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;BaseDadosLib&lt;/span&gt;.ACCESS&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;BaseDadosLib&lt;/span&gt;.OleDB&lt;/li&gt;&lt;/ul&gt;em cada um dos tipos de acesso existem, entre outras, as seguintes funções&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;int &lt;/span&gt;SQLNonQuery(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;sql)&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;Executa uma instrução na BD e retorna o número de linhas afectadas (ex.: UPDATE, DELETE, INSERT)&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;string&lt;/span&gt; SQLString(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;sql)&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;Devolve a primeira string de dados obtida da consulta&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;string[]&lt;/span&gt; SQLStringArray(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;sql)&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;Devolve um array de strings da consulta obtida à BD&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;string[,]&lt;/span&gt; SQLStringMatrix(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;sql)&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;Devolve um array bidimensional com os dados obtidos&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;DataTable&lt;/span&gt; SQLTable(&lt;span style="color: rgb(0, 0, 153);"&gt;string &lt;/span&gt;sql)&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;Devolve uma DataTable com os dados obtidos da BD&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;Tecnologias&lt;/span&gt;&lt;br /&gt;Esta biblioteca é baseada em singleton. Um singleton é um objecto criado estaticamente, assim, por mais objectos que se criem, todos estes apontarão para o mesmo objecto.&lt;br /&gt;&lt;br /&gt;De uma forma mais simples:&lt;br /&gt;ao criar um objecto, &lt;span style="font-style: italic;"&gt; Form xpto = new Form()&lt;/span&gt;, este é guardado na memória do computador ocupando determinada memória; ao voltar a criar outro &lt;span style="font-style: italic;"&gt;Form &lt;/span&gt;com a instrução anterior, é outra vez guardado na memória e assim ocupará mais memória.&lt;br /&gt;&lt;br /&gt;O singleton apenas ocupa memória uma vez, pois todos os objectos do mesmo tipo que se criem correspondem ao mesmo objecto.&lt;br /&gt;&lt;br /&gt;Daqui se tira logo uma enorme vantagem deste método:&lt;br /&gt;para se trabalhar sobre uma BD não necessitamos de estar constantemente a criar objectos novos para fazer novas ligações, isto acontece por exemplo quando num &lt;span style="font-style: italic;"&gt;Form &lt;/span&gt;acedem à BD e noutro &lt;span style="font-style: italic;"&gt;Form &lt;/span&gt;voltam a aceder à mesma BD pois têm que declarar em cada &lt;span style="font-style: italic;"&gt;Form &lt;/span&gt;um objecto para tal.&lt;br /&gt;Assim, apenas com um único objecto e uma única ligação podem trabalhar em qualquer &lt;span style="font-style: italic;"&gt;Form&lt;/span&gt; com a vossa BD sem estar a desperdiçar memória por cada novo acesso.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Dicas&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Se em determinada class for necessário mais que uma vez o acesso a uma BD, o objecto do tipo BaseDados deve ser declarado como global à mesma class, ou seja, declarar globalmente para assim poder ser visível a todas as funções dessa class evitando a declaração excessiva de variáveis.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Problemas&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Poderá ocorrer um erro a quem use sistemas operativos de 64 bits, a estes, devem ir às opções do projecto, e escolher a plataforma x86, como mostra a imagem abaixo para a configuração "All Configurations".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_EmNQ9qPMjMM/S0LGpEJ3TGI/AAAAAAAAABE/MWeIJcy39Gc/s1600-h/configuration_x64.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 155px;" src="http://4.bp.blogspot.com/_EmNQ9qPMjMM/S0LGpEJ3TGI/AAAAAAAAABE/MWeIJcy39Gc/s400/configuration_x64.png" alt="" id="BLOGGER_PHOTO_ID_5423115310099549282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Download&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Podes fazer o download da biblioteca &lt;a href="http://dl.dropbox.com/u/3902816/BaseDados.zip"&gt;aqui&lt;/a&gt; (15-01-10)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6324589214551143169-2338906671965540056?l=ceptrus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ceptrus.blogspot.com/feeds/2338906671965540056/comments/default' title='Enviar comentários'/><link rel='replies' type='text/html' href='http://ceptrus.blogspot.com/2009/10/biblioteca-basedados.html#comment-form' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6324589214551143169/posts/default/2338906671965540056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6324589214551143169/posts/default/2338906671965540056'/><link rel='alternate' type='text/html' href='http://ceptrus.blogspot.com/2009/10/biblioteca-basedados.html' title='Biblioteca BaseDados .NET'/><author><name>ceptrus</name><uri>http://www.blogger.com/profile/05322873520027493463</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_EmNQ9qPMjMM/Ss_D0q2olPI/AAAAAAAAAAM/9Ri41JDjlFs/s72-c/add_reference.JPG' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
