VB.NET X SQL SERVER

LIZA 29/07/2014 11:20:43
#439982
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
.......
.......
GUIMORAES 29/07/2014 17:33:35
#439994
Resposta escolhida
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á.


  

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.
LIZA 30/07/2014 08:57:02
#440021
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 ?


GUIMORAES 30/07/2014 14:17:10
#440041
é preciso fazer o imports sim, em todas as classes que utilizar a comunicação com o banco de dados.
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.


LIZA 30/07/2014 14:57:11
#440047
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.
GUIMORAES 30/07/2014 17:43:52
#440054
é 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.
LIZA 04/11/2014 18:34:26
#442288
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 ?






NICKOSOFT 06/11/2014 09:04:27
#442323
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
LIZA 06/11/2014 09:32:11
#442325
Nick, é assim que uso a conexão, mas vi algo sobre passar parâmetro do client ou provider...
NICKOSOFT 06/11/2014 14:31:25
#442334
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
Tópico encerrado , respostas não são mais permitidas