Você está na página 1de 17

ADO.

NET
Captulo 1 Conceitos bsicos
1 - Introduo
Desenvolvido a partir do Microsoft ActiveX Data Objects (ADO), o ADO.NET 2.0 uma tecnologia para acesso e manuseio de dados. Apesar do mesmo nome, o ADO.NET diferente conceitualmente do antigo ADO usado em aplicaes VB6, ASP ou Delphi. Enquanto o ADO tradicional foi desenvolvido para trabalhar conectado diretamente ao banco de dados, o ADO.NET foi desenvolvido para acessar o banco para obter dados e manipular as informaes de forma desconectada. No existe um objeto como o recorset, no qual possvel navegar por registros e alterar automaticamente os dados, embora seja fcil construir uma classe para esse fim, se a aplicao necessitar. As novidades do ADO.NET so as aplicaes baseadas na Web, em que os dados a serem transmitidos por conexes em rede esto no formato XML. A conexo com o objeto no ADO.NET feita de forma mais leve em comparao ao ADO, no qual vrios cursores eram suportados pelo recordset e diminuam as opes de personalizao. ADO ADO.NET Connection xxxConnection xxxTransaction Command xxxCommand RecordSet DataSet xxxDataReader xxxDataAdapter No ADO.NET, o recordset do ADO quebrado em mltiplas classes, permitindo que o cdigo em desenvolvimento seja focado em uma rea especfica. As reas so: *DataAdapter: personalizao da forma como a central de dados atualizada com as mudanas do DataSet; *TableAdapter: esta classe anexada a um DataSet e define instrues para incluir, alterar, excluir e pesquisar dados em tabelas; *DataReader: semelhante a um cursos firehose (cursor de somente leitura e avano); *DataSet: classe usada para armazenar informaes do banco de dados, assim como registrar alteraes, podendo ser usada para sincronizar os dados com o servidor. Na tabela a seguir, temos as vantagens encontradas na tecnologia ADO.NET: Vantagem Descrio Manuteno A manuteno de um sistema mais fcil quando o aplicativo desenvolvido em camadas. O modelo do ADO.NET facilita a construo de aplicativos em camadas. Programao O modelo de programao apresenta-se de forma mais concisa. Cada classe tem uma funcionalidade bem especfica.

Interoperabilidade

Performance

Aumento de capacidade

A transmisso em formato XML facilita o uso de um aplicativo em uma intranet ou na Internet. Trabalhar com os dados necessrios em memria mais rpido do que acessar diversas vezes o banco de dados. Uma aplicao bem construda pode se beneficiar muito do modelo de objetos do ADO.NET. Possui um modelo de programao confivel, no havendo necessidade de manter bancos de dados fechados ou conexes de bancos de dados em cache por longos perodos. As aplicaes ficam mais estveis.

2 Namespaces relacionados a dados


As classes do ADO.NET encontram-se nos namespaces System.Data e System.XML. Dentro desses namespaces encontram-se outros namespaces subdividindo-os em categorias. Os principais namespaces relacionados ao acesso a dados so: *System.Data: sendo um dos pilares do ADO.NET, faz a parte desconectada de sua arquitetura, atuando na incluso de classes; *System.Data.Common: apresenta classes abstratas que servem como base para as classes concretas, fornecendo um ambiente comum a qualquer tipo de provedor de dados; *System.Data.SqlClient: implanta o SQL Server .NET Data Provider; *System.Data.OleDb: implanta o OLE DB .NET Data Provider; *System.Data.ODBC: implanta o ODBC .NET Data Provider; *System.Data.OrableClient: implanta o Oracle .NET Data Provider; *System.XML: modelos para processamento de XML gerados por classes, interfaces e enumerations.

3 Modelos de objetos
Na sua maioria, os modelos de objetos do ADO.NET dividem-se em: *Classes Conectadas: este modelo deve ser utilizado especificamente para uma origem de dados e somente trabalhar com aquela origem de dados, podendo conectar-se a ela, recuper-la ou atualiz-la. O modelo de objetos inclui os provedores de classes SQL Server OLE DB, Oracle e ODBC. Outros providers podem ser obtidos com os fabricantes de dados; *Classes Desconectadas: o DataSet utilizado para armazenamento e gerenciamento de dados desconectados do cache, sendo acionado independentemente de qual seja o dado ou seu local originrio.

4 Ambiente conectado
Em um objeto conectado a uma origem de dados, as classes utilizadas nas aplicaes so providas pelos Data Providers .NET e possuem um modelo de objetos comum fornecido pelo ADO.NET atravs de classes base e interfaces. Esses provedores, mostrados a seguir, tambm criam uma linha mnima entre seu cdigo e a origem de dados, melhorando sua performance sem acarretar a diminuio de suas facilidades operacionais.

*OLE DB .NET DATA PROVIDER: faz a conexo e transmisso de dados com SQL Server 6.5 ou anteriores e bancos de dados como Oracle, Microsoft Access, Sybase e DB2/400. Os nomes de suas classes iniciam-se com o prefixo OleDb; *SQL SERVER .NET DATA PROVIDER: torna mais eficaz a conexo e a transmisso de dados com bancos de dados SQL Server 7.0 e SQL Server 2000. Os nomes de suas classes iniciam-se com o prefixo Sql. Um nmero maior de Data Providers .NET posteriormente prover classes e possuir outros prefixos para nomeao das mesmas. Os tpicos a seguir descrevem as funes das classes mais importantes. Os caracteres XXX representam os futuros prefixos a serem adotados, por exemplo Sql ou OLEDB. *XXXDataReader: classe utilizada para leitura de fluxos de dados forward-only e readonly de uma origem de dados; *XXXCommand: um comando executado por essa classes a partir de uma origem de dados; *XXXConnection: classe que se conecta a uma origem especfica de dados; *XXXXmlReader: classe que permite acesso rpido, sem cache e leitura forward-only de um dado em XML. Como visto anteriormente, a classe xxxDataReader atua na leitura de um dado em um determinado Data Server, devendo para tanto obedecer aos seguintes passos: 1. Declarar o objeto xxxConnection para que a conexo ao servidor possa ser efetuada; 2. Declarar um objeto xxxCommand que inclua uma instruo SQL SELECT destinada recuperao de informaes da base de dados; 3. Declarar um objeto xxxDataReader e utilizar o mtodo OPEN para abertura do xxxConnection; 4. Utilizar o mtodo ExecuteReader para executar o objeto xxxCommand. Aps isso, as informaes sero enviadas ao objeto xxxDataReader; 5. Vincular o objeto xxxDataReader a um controle DataGrid ou percorrer os dados utilizando mtodo READ(); 6. Utilizar o mtodo CLOSE para fechar o xxxDataReader e o xxxConnection.

5 Acesso desconectado
Em um ambiente desconectado, as classes utilizadas sero providas pelo namespace System.Data e pelos provedores .NET, sendo que as mais importantes so: *xxxDataAdapter: preenche a atualiza as mudanas ocorridas no DataSet utilizando as classes DataReader, Command e Connection; *xxxDataReader: em conjunto com o DataSet, executa a leitura de fluxos de dados forward-only e read-only de uma origem; *xxxCommand: um comando executado por esta classe a partir de uma origem de dados; *xxxConnection: quando acionado, conecta-se a origem especfica de dados.

5.1 Trabalhando em um ambiente desconectado


Quando trabalhamos em um ambiente desconectado de uma origem de dados, devemos seguir os seguintes passes adiante:

1. Configurar o DataAdapter com informaes de conexo e de instruo sql e preencher um DataSet utilizando o mtodo FILL; 2. Processar os dados no DataSet. Atravs dos controles do Windows ou da Web, os dados podem ser escolhidos, mostrados, resumidos ou filtrados; 3. Utilizar o mtodo UPDATE do DataAdapter para atualizar a origem de dados com as modificaes feitas no DataSet.

6 Integrao do ADO.NET com o XML


A plataforma ADO.NET foi desenvolvida em sua maioria com elementos XML, o que auxilia na converso de dados relacionados em dados XML. Os tpicos a seguir ilustram as funcionalidades encontradas no trabalho com XML. Por trabalhar de uma forma rica e porttil, representa os dados de uma maneira aberta e independente; Possibilita a converso de dados em uma coleo de tabelas e relaes; Apresenta-se basicamente no formato de texto, facilitando o envio a servios e aplicaes; Possibilita a criao de DataSets tipados. Para tanto, utiliza o Microsoft Visual Studio na descrio da estrutura de arquivos, gerando esquemas que podem ser transformados em arquivos ou fluxos XML. Aps isso, os arquivos ou fluxos podem preencher DataSets ou ser lidos pelos mesmos; Um arquivo ou fluxo de dados XML pode ser convertido em um Document Object Model (DOM). Aps esse procedimento, o arquivo resultante pode ser manipulado como um dado XML ou DataSet.

7 Os .NET Data Providers


Como visto anteriormente, os .NET Data Providers geram as classes utilizadas pelas aplicaes do ADO.NET, possibilitando a comunicao entre uma origem de dados e um componente, Web Service XML ou aplicao. Uma vez em conexo com uma origem de dados, os Data Providers podem recuperar e manipular dados ou atualizar a origem em questo. Com a implantao de um .NET Data Provider na plataforma ADO.NET, novas classes so adicionadas, permitindo que haja comunicao padronizada com diferentes tipos de dados. Cada tipo de origem de dados possui um Data Provider correspondente. Os mais importantes so: SQL Server .NET Data Provider; OLE DB .NET Data Provider; Open DataBase Connectivity (ODBC) .NET Data Provider; Os dois primeiros Data Providers anteriormente citados so implantados atravs de assemblies disponibilizados com o ADO.NET, utilizando-se o gerenciamento de referncias do Microsoft Visual Studio .NET, o Solution Explorer. Os assemblies mais importantes so:

System.Data.dll: implanta nos namespaces lgicos System.Data.OleDb e System.Data.SqlClient, respectivamente, os provedores OLE DB .NET Data Provider e SQL Server .NET Data Provider; System.Data.Odbc.dll: implanta o ODBC Data Provider; System.Data.OracleClient.dll: implanta o Oracle .NET Data Provider.

7.1 SQL Server .NET Data Provider


Sua funo estabelecer uma pequena linha de comunicao entre uma aplicao e o SQL Server. Para tanto, utiliza um protocolo prprio, o Tabular Data Stream (TDS), o que faz com que o acesso seja rpido sem a necessidade de linhas adicionais, aumentando a performance e escalabilidade. O SQL Server .NET Data Provider otimiza o acesso a bancos de dados do SQL Server 7.0 e superiores. Para a sua utilizao necessria a incluso do namespace System.Data.SqlClient em suas aplicaes. Exemplo: VB.NET Conectando um banco de dados SQL Server 7 e superiores dim cn as New System.Data.SqlClient.SqlConnection cn.connectionstring = Data Source-Localhost ;Initial Catalog=Northwind; User ID=sa; Password=; cn.Open() C# System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(); cn.ConnectionString = Data Source=Localhost; Initial Catalog=Northwind; User ID=sa; Password=; cn.Open();

7.2 OLE DB .NET Data Provider


Sua funo efetuar a conexo com uma origem de dados utilizando simultaneamente as linhas OLE DB nativo e COM. implantado no namespace System.Data.OleDb, sendo compatvel com SQL Server verso 6.5 ou anteriores e bancos de dados como Oracle, Microsoft Access, DB2/400 e Sybase. Para poder informar o tipo de banco de dados que se quer acessar necessria a utilizao da palavra-chave Provider na string de conexo. Observemos a tabela a seguir: Banco de Dados Provider SQL Server 6.5 SQLOLEDB Oracle Server MSADAORA Microsoft Access Microsoft.Jet.OLEDB.4.0 Exemplos:

VB.NET Accessando o Access dim cn as new System.Data.OleDb.OleDbConnection cn.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0; Source=c:\banco.mdb; Acessando o SQL Server 6.5 dim cn as new System.Data.OleDb.OleDbConnection cn.ConnectionString = Provider=SQLOLEDB; Data Catalog=Northwind; User ID=sa; Password=; C# //Acessando o Access System.Data.OleDb.OleDbConnection cn System.Data.OleDb.OleDbSqlConnection(); cn.ConnectionString = Provider SQLOLEDB; Data Catalog=Northwind; User ID=sa; Password=;

Data

Source=Localhost;

Initial

= Source=Localhost;

new Initial

OBS: No necessria a incluso da palavra-chave Provider quando se est utilizando o SQL Server .NET, pois, obviamente, a verso ser SQL Server 7.0 ou superior.

7.3 ODBC .NET Data Provider


O ODBC .NET deve ser utilizado quando se deseja conectar um banco de dados com o ODBC. O ODBC .NET Data Provider trabalha com Microsoft OLE DB Provider for ODBC Data (MSDADQL), utilizando aplicaes nativas em ODBC para programar uma interface (API Application Programming Interface) a fim de realizar a conexo e comunicao com um banco de dados.

7.4 Classes Data Provider


Conforme vimos anteriormente, as classes geradas por um Data Provider possuem um modelo de objetos comum fornecido pelo ADO.NET, por exemplo: SQL Server .NET Data Provider: o nome da classe inicia-se com o prefixo SQL; OLE DB .NET Data Provider: o nome da classe inicia-se com o prefixo OLEDB. Observemos a tabela a seguir: Classe SQL Server .NET Data Provider Connection SqlConnection Command SqlCommand DataReader SqlDataReader DataAdapter SqlDataAdapter

OleDb .NET Data Provider OleDbConnection OleDbCommand OleDbDataReader OleDbDataAdapter

Captulo 2 Estabelecendo conexes com o ADO.NET


1 A propriedade ConnectionString
A propriedade ConnectionString possui os parmetros necessrios para o estabelecimento de uma conexo com uma origem de dados, o que exigido para a movimentao de dados entre a sua origem e uma aplicao. Alguns desses parmetros sero mostrados a seguir, mas no so todos necessrios para que uma conexo seja estabelecida: *Provider: utilizado com objetos do OleDbConnection, marca ou retorna o nome do provedor para a conexo; *Initial catalog: nome do banco de dados; *Database: o mesmo que Initial catalog; *Password: a senha de acesso de um usurio do banco de dados; *PWD: o mesmo que password; *Connnection Timeout: o tempo utilizado, em segundos, para se esperar que uma conexo com o servidor seja realizada antes de ser gerada uma exceo; o tempo padro utilizado de 15 segundos; *Data Source: nome do arquivo de banco de dados Microsoft Acess, ou nome que o SQL Server utiliza ao abrir uma conexo; *Server: o mesmo que Data Source; *Persist Security Info: se a conexo estiver aberta, a configurao deste comando no modo False no retorna as informaes de segurana vulnerveis (senhas) como parte da conexo. False o modo padro, podendo ser um risco segurana se for configurado como True; *User ID: conta de acesso para o SQL Server; *UID: mesmo que USER ID; *Integrated Security: por meio deste parmetro, a conexo determinada como segura ou no. Os valores aceitos para configurao so true, false e SSPI (true). *Trusted Connection: o mesmo que Integrated Security. Exemplo: VB.NET Acessando um banco de dados SQL Server 7.0 ou superior: dim cn as new SqlClient.SqlConnection cn.ConnectionString = Data Source=Localhost; Initial Catalog=Northwind; User ID=sa ou dim cn as SqlClient.SqlConnection(Data Source=Localhost; Initial Catalog=Northwind; User ID=sa) C# //Acessando um banco de dados SQL Server 7.0 ou posterior System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(); Cn.ConnectionString = Data Source=Localhost; Initial Catalog=Northwind; User ID=sa; //ou

System.Data.SqlClient.SqlConnection System.Data.SqlClient.SqlConnection(Data Catalog=Northwind; User ID=sa);

cn = Source=Localhost;

new Initial

Uma conexo pode ser criada e gerenciada usando-se os objetos SqlConnection e OleDbConnection, alm dos objetos de conexo que o ADO.NET tem disponveis. Apenas quando esta conexo estiver fechada podem ser configuradas as propriedades de ConnectionString Exemplo: VB.NET Com conexo a banco de dados Access 2000 dim cnA as New OleDb.OleDbConnection() can.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0; Source=c:\meubancodedados.mdb; C# //Com conexo a banco de dados Access 2000 System.Data.OleDb.OleDbConnection cnA = System.Data.OleDb.OleDbConnection(); cnA.ConnectionString = Provider=Microsoft.Jet.OLEDB.4.0; Source=c:\meubancodedados.mdb;

Data

new Data

1.1 A classe xxxConnectionStringBuilder


O ADO.NET 2.0 conta com a classe xxxConnectionStringBuilder, que permite criar strings de conexo dinamicamente, usando um modelo de dados consistente e mais fcil de operar do que criar strings diretamente. As propriedades DataSource, InitialCatalog, IntegratedSecurity, UserID e Password so usadas para definir a conexo e a propriedade ConnectionString retorna a string construda. Por exemplo: VB.NET dim sb as New SqlConnectionStringBuilder() sb.DataSource=Localhost sb.InitialCatalog=Northwind sb.IntegratedSecurity=true dim cn as new SqlConnection(sb.ConnectionString) C# SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(); Sb.DataSource=Localhost; Sb.InitialCatalog=Northwind; Sb.IntegratedSecurity=true;

SqlConnection cn = new SqlConnection(sb.ConnectionString); Para cada provedor, existe a classe correspondente, como OleDbStringBuilder, OracleConnectionStringBuilder e OdbcConnectionStringBuilder. Todas essas classes so derivadas da classe base DBConnectionStringBuilder.

Utilizando a segurana do SQL Server

Uma aplicao acessa um banco de dados por meio do ADO.NET utilizando algumas regras de segurana, por exemplo, informaes de senha e nome de usurio. A disponibilidade destas informaes depender da configurao de segurana do banco de dados que acessado. Para autenticao no SQL Server, podem ser utilizadas: Windows Authentication Pode ser utilizada a conta do prprio Windows, sendo que, no momento do login, so determinados os parmetros de segurana da rede para este usurio. O controlador de domnio do Windows responsvel por realizar a validao destes parmetros de segurana; O acesso pode ser autorizado ou negado, dependendo da verificao que o SQL Server faz na rede com o nome do usurio, sem que a senha e o nome do login sejam verificados; Sempre que um usurio se conectar ao SQL Server, sero verificadas as suas credenciais, pois o gerenciamento do grupo e dos usurios somente pode ser feito por meio do Windows. Caso haja alguma alterao nos direitos de acesso rede de um membro do grupo de usurios conectado, somente no prximo login do Windows ou do SQL Server estas alteraes sero validadas. Assim, podemos verificar alguns servios oferecidos pelo Windows Authentication, tais como: validao e tamanho mnimo de senhas, criptografia e expirao de senhas, auditoria e bloqueio de senha aps tentativas invlidas de login. Mixed Mode Authentication (Windows Authentication e SQL Server Authentication) Os desenvolvedores podem configurar a autenticao para utilizar o Windows Authentication ou o SQL Server para se conectarem, porm, utilizando uma conta de acesso do Windows NT 4.0 ou Windows 2000, estaro conectados de forma segura tanto no Mixed Mode Authentication quanto no Windows Authentication; Se o usurio utilizar um login de conexo no segura, o SQL far a autenticao verificando se a senha est correta, de acordo com a gravada anteriormente, e se a conta est ativada. Caso no esteja, aparecer um aviso de erro e a autenticao no se completar; O SQL Server utilizar o Windows Authentication caso o usurio faa conexo pelo SQL Server 7.0 com o nome de usurio em branco. Se o usurio tentar se conectar ao SQL Server 7.0 com uma configurao do Windows Authentication Mode, este ser utilizado e o login descartado. O login e senha de autenticao do SQL Server so solicitados para o SQL Server 7.0 ou verses anteriores, ou ainda quando o Microsoft Windows 98 roda uma instncia do SQL

Server. Este, enquanto est sendo executado, utiliza o Mixed Mode, pois o Microsoft Windows 98 no suporta o Windows Authentication Mode, apenas a autenticao do SQL Server.

Mtodos Open e Close


H dois modos de iniciar e finalizar uma conexo ao banco de dados: Implicitamente: quando chama os mtodos localizados em um objeto que utiliza esta conexo. O mtodo Fill de um DataAdapter, por exemplo, abre e fecha a conexo com o banco automaticamente; Explicitamente: quando chama os mtodos Open e Close de um objeto xxxConnection. O tipo de acesso mais aconselhvel iniciar e finalizar uma conexo explicitamente, o que a torna mais eficiente, alm de ajudar na depurao e deixar o cdigo mais legvel. Exemplo:

VB.NET dim cn as New SqlClient.SqlConnection cn.connectionstring = Data Source-Localhost ;Initial Catalog=Northwind; Integrated Security=true; cn.Open() cdigo Cn.Close() C# System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(); cn.ConnectionString = Data Source=Localhost; Initial Catalog=Northwind; Integrated Security=true; cn.Open(); // Cn.Close(); Ao abrir uma conexo no banco de dados, muitos recursos do sistema so utilizados e algumas fontes possuem uma quantidade ilimitada para conexes abertas. Por isto, necessrio fech-la, sendo possvel dois mtodos do objeto Connection: Close: quando utilizado, desfaz as transaes pendentes, alm de fechar a conexo; Dispose: remove a conexo do pool de conexes. O objeto xxxConnection possui este mtodo para que recursos no-gerenciveis sejam liberados. Exemplo: VB.NET Conectando e instanciando um novo objeto SqlConnection cn dim cn as New SqlClient.SqlConnection

dim strCon as string strCon = Data Source=Localhost; Initial Catalog=Northwind; cn.ConnectionString = strCon cn.Open() cn.Close() cn.Dispose() C# System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection; String strCon; strCon = Data Source=Localhost; Initial Catalog=Northwind;; cn.ConnectionString = strCon; cn.Open(); cn.Close(); cn.Dispose(); Usamos o modo implcito de abrir e fechar uma conexo quando estamos trabalhando com um objeto DataAdapter. Neste caso, o seguinte procedimento realizado: 1. Os mtodos do objeto DataAdapter, ao serem chamados, verificam se a conexo est aberta; 2. Se a conexo estiver fechada, o DataAdapter abre a conexo e executa as informaes que devem ser processadas; 3. Em seguida, o DataAdapter fecha a conexo. Exemplo: VB.NET dim cn as New SqlClient.SqlConnection (Data Source=Localhost; & _ Initial Catalog=northwind; Integrated Security=true;) Dim da as new SqlClient.SqlDataAdapter(select * from customers, cn) Dim ds as new DataSet implicitamente abre e fecha a conexo Da.fill(ds) C# System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.SqlConnection(Data Sourcce=Localhost; Initial Catalog=Northwind; Integrated Security=true;); System.Data.SqlClient.SqlDataAdapter da = new System.Data.SqlClient.SqlDataAdapter(select * from customers, cn); System.Data.DataSet ds = new System.Data.DataSet(); //abre a fecha a conexo implicitamente Da.fill(ds); OBS: se o objeto de conexo for exigido pela lixeira, ou sair do escopo, as conexes no sero fechadas implicitamente.

Apenas uma conexo ser aberta quando mltiplas tabelas estiverem sendo preenchidas em um DataSet, por meio do mesmo banco de dados (neste caso haver um DataAdapter para cada tabela). Assim, aconselhvel iniciar a conexo, chamar o mtodo Fill dos mltiplos DataAdapter e encerrar a conexo explicitamente, pois, se for usado o modo implcito, a conexo iniciar e encerrar muitas vezes durante o preenchimento das tabelas.

Tratamento de erros

Quando ocorre um erro ou um comportamento inesperado na execuo de um programa ou na execuo de um ambiente, surge uma exceo, ou seja, erros especficos que podem ser manipulados. Em algumas verses anteriores do Visual Basic, havia apenas um erro com informaes ilimitadas, o que tornava necessrio verificar a propriedade do objeto Err para ento descobrir o erro (a instruo Select Case era utilizada para ramificar os blocos de cdigos e acha-lo). As linguagens que utilizam o .NET Framework, hoje em dia, precisam estar prontas para trabalhar com o novo padro de tratamento de erro, o structured exception handling, que nos informa um erro com mais preciso. Isto fez com que todas as linguagens .NET passassem a utilizar o Common Language Runtime (CLR) para interagirem entre si. A classe de excees pode ser criada pelo desenvolvedor a partir de uma base de excees adequadas. Cada classe pode determinar o uso de suas excees com uma stored procedure, um nmero de linha ou erro, um nome de servidor ou uma informao adicional especificada pela tarefa de classe desenvolvida para o desempenho. A manipulao de uma exceo no ADO.NET acontece da seguinte forma: 1. O cdigo dispara uma exceo na aplicao para o cdigo da manipulao; 2. O structured exception handling une uma estrutura de controle de excees, filtros e blocos de cdigos protegidos para detectar erros na execuo de um programa e responder a eles. O .NET Framework possui uma estrutura de controle definida pela instruo Try... Catch... Finally. Se houver erros no bloco Try estes sero tratados pelo Catch. O bloco Catch pode ser utilizado na quantidade que for necessria quando um bloco Try... Catch... Finally utilizado para o tratamento de um erro e, para rodar um bloco sem restries, o bloco Finally deve ser adicionado. Exemplo: VB.NET dim cn as New SqlClient.SqlConnection try tentando efetuar a conexo Dim strCon as string = Data source=Localhost; Initial Catalog=Northwind; Integrated Security=true; Cn = new SqlClient.SqlConnection(strCon) abrindo a conexo

Cn.Open() Catch erro_oper as System.InvalidOperationException ao tentar efetuar uma operao em que a mesma conexo j se encontra aberta, as instrues deste bloco sero executadas e a mensagem a seguir ser exibida. MessageBox.Show(Operao invlida! Banco de dados j est aberto!) Catch erro_exc as System.Exception MessageBox.Show(erro_exc.ToString()) Finally fechar o banco (bloco opcional) Cn.Close() Cn.Dispose() C# dimStatic void abrirCn { System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.Sqlconnection(strCon) Try { //tentando efetuar a conexo String strCon = Data source=Localhost; Initial Catalog=Northwind; Integrated Security=true;; //abrindo a conexo Cn.Open(); } Catch (System.InvalidOperationException erro_oper) { //ao tentar efetuar uma operao em que a mesma conexo j se encontra aberta, //as instrues deste bloco sero executadas e a mensagem a seguir ser exibida. MessageBox.Show(Operao invlida! Banco de dados j est aberto!); } Catch erro_exc as System.Exception { MessageBox.Show(erro_exc.ToString()); } Finally { //fechar o banco (bloco opcional) Cn.Close(); Cn.Dispose(); } }

4.1 Classe SqlException


Toda vez que o SQL Server .NET Data Provider localizar uma ocorrncia que no pode ser tratada, criada uma classe conhecida por SqlException, que contm pelo menos uma instncia do SqlError. Uma coleo denominada Errors encontrada nos objetos de SqlException toda vez que ocorre uma exceo. Atravs dessa coleo, possvel saber detalhes do erro ocorrido. A seguir, temos algumas propriedades comuns dos objetos do SqlError: LineNumber: verifica a stored procedure que contm o erro ou o nmero da linha de comando do Transact-SQL; Message: descreve o erro; Class: verifica o nvel de rigor do erro do SQL Server; Number: o nmero de identificao do erro, que permite verificar exatamente o problema ocorrido. O nvel de rigor acessado pela propriedade Class da classe SqlError descrito por: 11-16: erro gerado pelo usurio, que tambm pode corrigi-lo; 20-25: erro gerado pelo hardware ou software, que faz com que a conexo SQL seja fechada pelo servidor, mas possa ser reaberta pelo usurio; 17-19: erro gerado pelo hardware ou software, em que a conexo SQL fica aberta, permitindo que o usurio continue trabalhando, mas sem poder executar uma determinada instruo. Alguns erros do SQL Server so comuns, tais como 17 (nome invlido de servidor), 18456 (senha ou nome de usurio invlidos) e 4060 (nome do banco de dados invlido).

Obs: iniciar uma conexo um mtodo que pode gerar no apenas uma, mas mltiplas ocorrncias. O desenvolvedor deve estar pronto para manipular as excees e vincul-las aos erros que o SQL enviou aplicao, caso uma SqlException ocorra. Exemplo: VB.NET dim cn as New SqlClient.SqlConnection try tentando efetuar a conexo Dim strCon as string = Data source=Localhost; Initial Catalog=Northwind; Integrated Security=true; Cn = new SqlClient.SqlConnection(strCon) abrindo a conexo Cn.Open() Catch erro_oper as System.InvalidOperationException

ao tentar efetuar uma operao em que a mesma conexo j se encontra aberta, as instrues deste bloco sero executadas e a mensagem a seguir ser exibida. MessageBox.Show(Operao invlida! Banco de dados j est aberto!) Catch SqlExc as SqlClient.SqlException Dim msgerro as String Dim ErroSql as System.Data.SqlClient.SqlError For Each ErroSql in SqlExc.Errors Select Case ErroSql.Number Case 4060 Msgerro =Falha no banco de dados! Contactar o + MsgErro + ="administrador Case 18456 Msgerro = Credenciais do usurio invlidas! End Select MessageBox.Show(msgerro, Mensagens exceptions &_ ErroSql.Number, MessageBoxButtons.OkMessageIcon.Error) Next Finally fechando o banco de dados. este bloco opcional Cn.Close() Cn.Dispose() Cn = nothing End Try C# Static void abrir2() { String StrCon = Data Source=Localhost;Initial Catalog=Turismo;; StrCon += Integrated Security=true;UID=as;pwd=; System.Data.SqlClient.SqlConnection(strCon)// String msgerro = erro; Try { //tentando efetuar a conexo //abrindo a conexo Cn.Open()/ } Catch (System.InvalidOperationException erro_Oper)

{ //ao tentar efetuar uma operao em que a mesma conexo j se encontra aberta, as instrues deste bloco sero executadas e a mensagem a seguir ser exibida. MessageBox.Show(Operao invlida + Banco de dados j est aberto + \n + erro_Oper.Message); Catch } System.Data.SqlClient.SqlConnection cn = new System.Data.SqlClient.Sqlconnection(strCon) Try { //tentando efetuar a conexo String strCon = Data source=Localhost; Initial Catalog=Northwind; Integrated Security=true;; //abrindo a conexo Cn.Open(); } Catch (System.InvalidOperationException erro_oper) { //ao tentar efetuar uma operao em que a mesma conexo j se encontra aberta, //as instrues deste bloco sero executadas e a mensagem a seguir ser exibida. MessageBox.Show(Operao invlida! Banco de dados j est aberto!); } Catch erro_exc as System.Exception { MessageBox.Show(erro_exc.ToString()); } Finally { //fechar o banco (bloco opcional) Cn.Close(); Cn.Dispose(); } }

Você também pode gostar