VB.NET X SQL SERVER
Amigos, estou migrando aos poucos um pequeno aplicativo que uso em paralelo ao meu sistema principal que é em vb6, para vb.net, como todo começo, surgem muitas dúvidas, no vb6 tenho a conexão com o banco em um módulo, o qual pega os parâmetros de um arquivo INI criptografado, gostaria de saber como traduzo para o vb.net a conexão abaixo, levando em conta o melhor provedor nativo para sql server. e mais abaixo, como substituo o recordset ?, no vb.net vejo muito sobre ado.net, linq, datareader, etc...acaba confundindo em relação ao vb6.
-----------------------------------------------------------
Aqui seria a conexão no módulo:
Public Cnn As ADODB.Connection
Public Rs As ADODB.Recordset
Public Sub CONECTA_SQLSERVER()
On Error GoTo Erro_Conexao
Cnn = New ADODB.Connection
Screen.MousePointer = vbHourglass
With Cnn
.CursorLocation = adUseClient
.Provider = [Ô]SQLNCLI[Ô]
.Properties([Ô]Data Source[Ô]).value = dbserver
.Properties([Ô]Initial Catalog[Ô]).value = [Ô]meubanco[Ô]
.Properties([Ô]User ID[Ô]).value = dbuser
.Properties([Ô]Password[Ô]).value = dbpass
.Open()
End With
Screen.MousePointer = vbDefault
Exit Sub
Erro_Conexao:
avisocnn = MsgBox([Ô]ATENÇÃO!!!, Ocorreu a seguinte exceção ao conectar ao banco.:[Ô] & vbCrLf & Str(Err.Number) & Chr(10) & Err.Description, vbCritical + vbOKOnly, [Ô]Aviso ao usuário[Ô])
Screen.MousePointer = vbDefault
err.clear
exit sub
End Sub
------------------------------------------------------
e aqui seria ja em um form, com a conexão ativa, um select:
sql = [Ô]select custo,prevenda from usuarios where codigo = [Ô] & txtuserid.Text & [Ô] [Ô]
Set Rs = New ADODB.Recordset
Rs.Open sql, Cnn, adOpenForwardOnly, adLockReadOnly
If Not Rs.EOF Then
.......
.......
-----------------------------------------------------------
Aqui seria a conexão no módulo:
Public Cnn As ADODB.Connection
Public Rs As ADODB.Recordset
Public Sub CONECTA_SQLSERVER()
On Error GoTo Erro_Conexao
Cnn = New ADODB.Connection
Screen.MousePointer = vbHourglass
With Cnn
.CursorLocation = adUseClient
.Provider = [Ô]SQLNCLI[Ô]
.Properties([Ô]Data Source[Ô]).value = dbserver
.Properties([Ô]Initial Catalog[Ô]).value = [Ô]meubanco[Ô]
.Properties([Ô]User ID[Ô]).value = dbuser
.Properties([Ô]Password[Ô]).value = dbpass
.Open()
End With
Screen.MousePointer = vbDefault
Exit Sub
Erro_Conexao:
avisocnn = MsgBox([Ô]ATENÇÃO!!!, Ocorreu a seguinte exceção ao conectar ao banco.:[Ô] & vbCrLf & Str(Err.Number) & Chr(10) & Err.Description, vbCritical + vbOKOnly, [Ô]Aviso ao usuário[Ô])
Screen.MousePointer = vbDefault
err.clear
exit sub
End Sub
------------------------------------------------------
e aqui seria ja em um form, com a conexão ativa, um select:
sql = [Ô]select custo,prevenda from usuarios where codigo = [Ô] & txtuserid.Text & [Ô] [Ô]
Set Rs = New ADODB.Recordset
Rs.Open sql, Cnn, adOpenForwardOnly, adLockReadOnly
If Not Rs.EOF Then
.......
.......
Liza.
Esqueça o que você sabe sobre o VB6, no .net muda tudo.
Primeiro, você pode criar uma classe de conexão com métodos estáticos. Para isto, você deve utilizar ado.net, é melhor do que o ADODB e bem mais completo, você verá.
Para executar um select
O objeto dataReader substitui o recordset, basta instanciar e utilizar.
Uma dica é utilizar sempre orientação a objetos, faz uma pesquisa sobre o mesmo, não tente usar o .net de forma procedural como no vb6, você poderá perder recursos e desempenho.
Esqueça o que você sabe sobre o VB6, no .net muda tudo.
Primeiro, você pode criar uma classe de conexão com métodos estáticos. Para isto, você deve utilizar ado.net, é melhor do que o ADODB e bem mais completo, você verá.
Public Class Conexao
Public Shared cnn As SqlConnection
Public Shared Sub conectar()
Dim stringConexao As String = [Ô]Server=my_server;Database=name_of_db;User Id=user_name;Password=my_password[Ô]
cnn.ConnectionString = stringConexao
Try
cnn.Open()
Catch ex As Exception
MsgBox([Ô]Não foi possÃvel realizar a conexão com o banco de dados![Ô], MsgBoxStyle.Critical, [Ô]Erro[Ô])
End Try
End Sub
Public Shared Sub desconectar()
cnn.Close()
cnn.Dispose()
End Sub
End Class
Para executar um select
Private Sub btnExecutar_Click(sender As Object, e As EventArgs) Handles btnExecutar.Click
Dim sql As String = [Ô][Ô]
sql = [Ô]Select * from clientes[Ô]
Conexao.conectar()
Dim cmd As SqlCommand
cmd = New SqlCommand(sql, Conexao.cnn)
Dim dr As SqlDataReader
dr = cmd.ExecuteReader
Do While dr.Read
ListBox1.Items.Add(dr.Item([Ô]nome[Ô]).ToString)
Loop
Conexao.desconectar()
End Sub
O objeto dataReader substitui o recordset, basta instanciar e utilizar.
Uma dica é utilizar sempre orientação a objetos, faz uma pesquisa sobre o mesmo, não tente usar o .net de forma procedural como no vb6, você poderá perder recursos e desempenho.
Gui, na conexão entendi claramente, apenas a cnn é declarada, é bem semelhante ao vb6, mas precisa fazer o (imports) né ?, neste caso, o que importar ?, e em que parte do projeto fazer esse imports para que o mesmo seja visÃvel no projeto todo ?, é necessário inserir algum objeto visual ou tudo via código ?
Em relação à substituição do recordset, percebi que além da string sql e do datareader, tabmbém é necessário o sqlcomand ?, ou seja, não trabalha direto como o recordset do vb6 ?
em tempo e abusando, poderia postar um exemplo de insert,delete,update diretos pela conexão ?
Em relação à substituição do recordset, percebi que além da string sql e do datareader, tabmbém é necessário o sqlcomand ?, ou seja, não trabalha direto como o recordset do vb6 ?
em tempo e abusando, poderia postar um exemplo de insert,delete,update diretos pela conexão ?
é preciso fazer o imports sim, em todas as classes que utilizar a comunicação com o banco de dados.
O imports fica assim:
Ele não trabalha direto, mais você verá as vantagens disso, a questão é costume mesmo, logo você se acostuma.
Um insert seria dessa forma
é sempre importante utilizar parâmetros no insert, update, delete, isto evita injeção de sql.
A forma de execução é a mesma do Datareader, mais você não precisa instanciar o mesmo, já que não será utilizado.
Utilizando orientação a objetos, você pode criar uma classe com seus atributos e uma classe com os métodos de insert, update, delete, chamamos isto de CRUD.
O imports fica assim:
Imports System.Data.SqlClient
Public Class Conexao
Public Shared cnn As SqlConnection
Public Shared Sub conectar()
Dim stringConexao As String = [Ô]Server=my_server;Database=name_of_db;User Id=user_name;Password=my_password[Ô]
cnn.ConnectionString = stringConexao
Try
cnn.Open()
Catch ex As Exception
MsgBox([Ô]Não foi possÃvel realizar a conexão com o banco de dados![Ô], MsgBoxStyle.Critical, [Ô]Erro[Ô])
End Try
End Sub
Public Shared Sub desconectar()
cnn.Close()
cnn.Dispose()
End Sub
End Class
Ele não trabalha direto, mais você verá as vantagens disso, a questão é costume mesmo, logo você se acostuma.
Um insert seria dessa forma
Dim sql As String = [Ô][Ô]
sql = [Ô]Insert into clientes(codigo,nome) values (@codigo, @nome)[Ô]
Conexao.conectar()
Dim cmd As SqlCommand
cmd = New SqlCommand(sql, Conexao.cnn)
cmd.Parameters.AddWithValue([Ô]@codigo[Ô], txtCodigo.text)
cmd.Parameters.AddWithValue([Ô]@nome[Ô], txtNome.text)
cmd.ExecuteNonQuery()
Conexao.desconectar()
é sempre importante utilizar parâmetros no insert, update, delete, isto evita injeção de sql.
A forma de execução é a mesma do Datareader, mais você não precisa instanciar o mesmo, já que não será utilizado.
Utilizando orientação a objetos, você pode criar uma classe com seus atributos e uma classe com os métodos de insert, update, delete, chamamos isto de CRUD.
OK, nossa me ajudou muito, pesquisei na net, mas não vinha nada tão claro assim, você conhece algum site, que tenha material em vb.net ?, vou precisar manipular listviews, e arquivos INI ou outro com função de criptografia, ja tenho algo em testes, mas sempre é bom mais exemplos.
OBS:, esses tipos de acesso a dados, é indiferente para todas as versões do visual studio ?, estou usando o 2010 ultimate.
OBS:, esses tipos de acesso a dados, é indiferente para todas as versões do visual studio ?, estou usando o 2010 ultimate.
é difÃcil te passar um site com material, pois nem todos tem um material completo. é mais fácil procurar sobre um determinado assunto.
Manipulação de listview, arquivos INI e criptografia é fácil, basta procurar em especÃfico por cada um.
Boa parte dos conteúdos estão em inglês, outros em C#, é uma boa oportunidade de aprender outras lÃnguas e linguagens.
O tipo do acesso não muda de versão para versão.
Manipulação de listview, arquivos INI e criptografia é fácil, basta procurar em especÃfico por cada um.
Boa parte dos conteúdos estão em inglês, outros em C#, é uma boa oportunidade de aprender outras lÃnguas e linguagens.
O tipo do acesso não muda de versão para versão.
na linha de conexão abaixo, não tenho como especificar o client/provider ?, (sqlncli ou sqlncli10) ?
Dim stringConexao As String = [Ô]Server=servidor\instancia;Database=meubanco;User Id=user_name;Password=minhasenha[Ô]
ja criei minha conexão em um módulo, e chamo nos forms quando necessário, uma duvida que pintou com os selects, no vb6 eu abria os recordsets como somente leitura para consultas e jogava em um listbox ou listview... no vb.net, qual melhor forma de consultar apenas como leitura para jogar em um list e ja desconectar do banco ?, vi algo sobre dataset e dataadapter ou datareader com command..A melhor opção seria ?
Dim stringConexao As String = [Ô]Server=servidor\instancia;Database=meubanco;User Id=user_name;Password=minhasenha[Ô]
ja criei minha conexão em um módulo, e chamo nos forms quando necessário, uma duvida que pintou com os selects, no vb6 eu abria os recordsets como somente leitura para consultas e jogava em um listbox ou listview... no vb.net, qual melhor forma de consultar apenas como leitura para jogar em um list e ja desconectar do banco ?, vi algo sobre dataset e dataadapter ou datareader com command..A melhor opção seria ?
a connectionstring em sua forma mais simples
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
apenas leitura pode usar o datareader
aki uma pincelada
http://msdn.microsoft.com/en-us/library/ms254931(v=vs.110).aspx
Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
apenas leitura pode usar o datareader
aki uma pincelada
http://msdn.microsoft.com/en-us/library/ms254931(v=vs.110).aspx
Nick, é assim que uso a conexão, mas vi algo sobre passar parâmetro do client ou provider...
tipo vc ter um arquivo de conf q guarda as informações, e essa string consulta as variáveis la? caso seja aqui vc encontra uma base q já pode lhe ajudar
http://www.macoratti.net/net_cfg1.htm
http://www.macoratti.net/net_cfg1.htm
Tópico encerrado , respostas não são mais permitidas