CONEXAO COM BD SQL SERVER

ROGERCSANTOS 05/03/2014 01:13:41
#435520
Amigos,

Bom dia,

Estou com uma dúvida e preciso da ajuda de vocês para esclarecê-la.

Para conectar ao banco de dados Sql Server eu utilizo o seguinte código:

Dim CN_ProcBanco2 As New ADODB.Connection
Dim rsSelecaoBancoProcBanco2 As New ADODB.Recordset
Dim cnnComandoBanco_ProcBanco2 As New ADODB.Command

CN_ProcBanco2.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CN_ProcBanco2.Properties([Ô]Data Source[Ô]).Value = [Ô]ROGERIO-PC\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CN_ProcBanco2.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CN_ProcBanco2.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CN_ProcBanco2.Properties([Ô]Password[Ô]).Value = [Ô]sysdba[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CN_ProcBanco2.Open [ô] Abrindo a conexão


Set rsSelecaoBancoProcBanco2 = New ADODB.Recordset
Set rsSelecaoBancoProcBanco2.ActiveConnection = CN_ProcBanco2

O código acima funciona perfeitamente, porém, eu preciso de uma maneira de não precisar criar uma conexão para cada ação no sistema (Salvar, editar, excluir, incluir, etc, etc).

Por exemplo:
Para a rotina salvar eu crio o código acima, modificando as variáveis:

CN_ProcBanco2 para CN_Salvar
rsSelecaoBancoProcBanco2 para rsSelecaoBanco_Salvar
cnnComandoBanco_ProcBanco2 para cnnComandoBanco_Salvar

Para a rotina Editar eu crio o código acima, modificando as variáveis:

CN_ProcBanco2 para CN_Editar
rsSelecaoBancoProcBanco2 para rsSelecaoBanco_Editar
cnnComandoBanco_ProcBanco2 para cnnComandoBanco_Editar


Preciso de ajuda para arrumar uma maneira de automatizar essa rotina, pois meu código está ficando muito carregado e uma bagunça.

Ja pensei em criar uma função, mais ai encontro um problema:

Dim CN_ProcBanco3 As New ADODB.Connection
Dim rsSelecaoBancoProcBanco3 As New ADODB.Recordset
Dim cnnComandoBanco_ProcBanco3 As New ADODB.Command

CN_ProcBanco3.Provider = [Ô]SQLOLEDB[Ô] [ô] Provedor de acesso ao SQL Server
CN_ProcBanco3.Properties([Ô]Data Source[Ô]).Value = [Ô]ROGERIO-PC\SQLEXPRESS2008[Ô] [ô]Nome da Maquina\Instancia onde está instalado o BD
CN_ProcBanco3.Properties([Ô]Initial Catalog[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Nome do BD
CN_ProcBanco3.Properties([Ô]User ID[Ô]).Value = [Ô]SYSCONTROL[Ô] [ô]Usuário para conexão no BD no SQL SERVER 2008
CN_ProcBanco3.Properties([Ô]Password[Ô]).Value = [Ô]sysdba[Ô] [ô]Senha para conexão no BD no SQL SERVER 2008
CN_ProcBanco3.Open [ô] Abrindo a conexão


Set rsSelecaoBancoProcBanco3 = New ADODB.Recordset
Set rsSelecaoBancoProcBanco3.ActiveConnection = CN_ProcBanco3

rsSelecaoBancoProcBanco3.Open [Ô]Select * from Banco[Ô]

Set msfrprocbanco.DataSource = rsSelecaoBancoProcBanco3

O problema é que a parte abaixo não faz parte de uma regra geral e sim de uma ação específica:

rsSelecaoBancoProcBanco3.Open [Ô]Select * from Banco[Ô]

Set msfrprocbanco.DataSource = rsSelecaoBancoProcBanco3

Vocês que são mais experientes no assunto, poderiam me auxiliar?

Antecipadamente agradeço a ajuda de todos.



OMAR2011 05/03/2014 09:09:42
#435523
Uma das que tem que fazer é manter o Banco de Dados aberto o tempo todo.Carrega ele
no load do form.Só fecha quando finalizar o programa.
Toda ação que fizer como apenas leitura feche a Tabela.Close e nothing.
Ai pode usar a mesma variável para outras coisas
Para movimentação de registro,ai sim usa outra variável.
Nem todos usam está forma,devido ao grande números de registros caso houver.
MOUSER 05/03/2014 10:32:09
#435524
olha, eu mesmo uso 2 tipos de códigos, este é um deles, e depois a cada tarefa eu chamo ele e o resto por conta dele: Imports System.Data.SqlClient
Imports System.Windows.Forms
Public Class cldBancoDados
Dim StringConexao As String = [Ô]Server=.;Database=nomedadatabase;user id=usuario;pwd=senha[Ô]
Private Function AbreBanco() As SqlConnection
Dim Conn As New SqlConnection
With Conn
.ConnectionString = StringConexao
.Open()
End With
Return Conn
End Function
Private Sub FechaBanco(ByVal Conn As SqlConnection)
If Conn.State = ConnectionState.Open Then
Conn.Close()
End If
End Sub
Public Sub ExecutaComando(ByVal strQuery As String)
Dim Conn As New SqlConnection
Try
Conn = AbreBanco()
Dim cmdComando As New SqlCommand
With cmdComando
.CommandText = strQuery
.CommandType = CommandType.Text
.Connection = Conn
.ExecuteNonQuery()
End With
Catch ex As Exception
Throw ex
Finally
End Try
End Sub
Public Function RetornaDataSet(ByVal strQuery As String) As DataSet
Dim Conn As New SqlConnection
Try
Conn = AbreBanco()
Dim cmdComando As New SqlCommand
With cmdComando
.CommandText = strQuery
.CommandType = CommandType.Text
.Connection = Conn
End With
Dim daAdaptador As New SqlDataAdapter
Dim dsDataSet As New DataSet
daAdaptador.SelectCommand = cmdComando
daAdaptador.Fill(dsDataSet)
Return dsDataSet
Catch ex As Exception
Throw New Exception([Ô]Erro na camada 3:[Ô] & ex.Message)
Finally
FechaBanco(Conn)
End Try
End Function
Public Function RetornaDataReader(ByVal strQuery As String) As SqlDataReader
Dim Conn As New SqlConnection
Try
Conn = AbreBanco()
Dim cmdComando As New SqlCommand
With cmdComando
.CommandText = strQuery
.CommandType = CommandType.Text
.Connection = Conn
End With
Return cmdComando.ExecuteReader
Catch ex As Exception
Throw ex
End Try
End Function
End Class

onde estiver escrito nome da database, vc digita o nome do banco de dados q vc salvou, onde esta escrito usuario e senha, vc digita o o login quando vc abre o script do SQL, faça o teste de conexão com alguma tabela no seu sistema e me confirme se aparece o mesmo erro... Me confirme se a lógica da sua conexão é a mesma da minha... se for, eu posto o outro código q provavelmente vai te ajudar...
OMAR2011 05/03/2014 10:56:33
#435528
Mouser,você tem que responder de acordo a pergunta e o programa.
Existe diferença e grande,pois este código não consegue fazer nada.
Vb6 diferente Vbnet
Faça seu login para responder