DICA SOBRE OPTIMIZACAO

ROBSON220BASS 24/05/2012 19:03:24
#402714
pessoal, eu aqui dnovo..
dessa vez para pedir opnial sobre uma conexao com mysql.

1º . a conexao: no modulo

Public Sub ConnectMySQL() [ô]Conecta no MySQL

Try
myCON = New MySql.Data.MySqlClient.MySqlConnection([Ô]server=[Ô] & MySQLHost & [Ô];User id=[Ô] & MySQLUsuario & [Ô];password=[Ô] & MySQLSenha & [Ô];database=[Ô] & MySQLDataBase)
myCON.Open()


Catch ex As Exception

MsgBox([Ô]Erro ao conectar[Ô], vbCritical, [Ô]Atenção![Ô])
Exit Sub

End Try

End Sub

Public Sub SetNew(ByVal NUM As String, ByVal IDPROD As String, ByVal DESC As String, ByVal EMB As String, ByVal QT As String, ByVal DT As String, ByVal NUMEMPRESA As String)
Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & NUM & [Ô][ô],[ô][Ô] & IDPROD & [Ô][ô],[ô][Ô] & DESC & [Ô][ô],[ô][Ô] & EMB & [Ô][ô],[ô][Ô] & QT & [Ô][ô],[ô][Ô] & DT & [Ô][ô],[ô][Ô] & NUMEMPRESA & [Ô][ô])[Ô], myCON)
myDRR = myCMD.ExecuteReader()
myDRR.Close()
myCMD.Dispose()

Catch ex As Exception
End Try

End Sub

2º . agora no form:

Public Sub Gravar()

Dim codempresa As String = Trim(FrmMenu.lblcodempr.Text)

For i = 0 To FrmCot.DGVCOT.Rows.Count - 1

SetNew(Trim(FrmCot.lblNUMPED.Text), FrmCot.DGVCOT.Rows(i).Cells(0).Value, FrmCot.DGVCOT.Rows(i).Cells(1).Value, FrmCot.DGVCOT.Rows(i).Cells(2).Value, FrmCot.DGVCOT.Rows(i).Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))

Next i

DisconnectMySQL()

MsgBox([Ô]Enviando com sucesso![Ô], vbInformation, [Ô]Enviando dados p/ web[Ô])

Me.Close()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Me.Cursor = Cursors.WaitCursor

Gravar

Me.Cursor = Cursors.Arrow

End Sub

essa gambi, faz todo processo que deve

porem fiz um teste com 1500 itens (praticamente e isso que precisarei), demorou aprox. 6 minutos e 30 segundos.


tem como deixa-lo mais rapido?

KERPLUNK 24/05/2012 19:18:47
#402715
Resposta escolhida
1 - Não use ExecuteReader se vai somente inserir e não buscar o resultado da inserção.
2 - Você pode usar um stringbuilder para criar um único parâmetro de valores e inserir todos os valores com um só comando, mais ou menos assim:
dim valores As New StringBuilder
dim valor As string
For i = 0 To FrmCot.DGVCOT.Rows.Count - 1
With FrmCot.DGVCOT.Rows(i)
valor = string.Format([Ô]({0},{1},{2},{3},{4},{5},{6}),[Ô], .Cells(0).Value, .Cells(1).Value, .Cells(2).Value, .Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))
valores.Append(valor)
Next i
valor = valores.ToString().Substring(1, valores.ToString().Length - 1)
Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & valor & [Ô])[Ô], myCON)
myDRR = myCMD.ExecuteNonQuery()
myDRR.Close()
myCMD.Dispose()

Catch ex As Exception
End Try
ROBSON220BASS 24/05/2012 22:23:41
#402726
KERPLUNK, coloquei este codigo mas nao deu certo..

o correto e colocar tudo isso ai em uma sub ?

ou cria-la separadamente?

esta parte aqui nao da certo, o vb diz que este tipo é integer e nao pode ser convertido para string.
myDRR = myCMD.ExecuteNonQuery()

... se voce tiver mas dicas ai... ficarei agradecido.

obrigado, desde ja
KERPLUNK 25/05/2012 00:46:58
#402732
Dicas:
1 - Aprenda o que são cada um dos comandos, simplesmente copiar e colar código não serve, você precisa entender o que está acontecendo
O que eu passei é uma sugestão, escrevi o código direto aqui no tópico e nem testei é só pra você entender a idéia.

Citação:

o correto e colocar tudo isso ai em uma sub ?

ou cria-la separadamente?


O correto mesmo é fazer um modelo orientado à objetos e usar. Tem vários artigos e tópicos aqui mesmo no fórum sobre o assunto.
ROBSON220BASS 26/05/2012 02:28:27
#402850
KERPLUNK, mais 1 vez me ajuda ai por favor.. pois nao consegui nao tenho conhecimento neste assunto.

tentei diversas formas mais o que recebo e a mensagem:
traduzida: dados muito longo para a coluna cotnumped na linha 1

o codigo ta assim:

Public Sub NovoCmd()
Dim valores As New StringBuilder
Dim valor As String

Dim codempresa As String = Trim(FrmMenu.lblcodempr.Text)
Dim numped As String = Trim(FrmCot.lblNUMPED.Text)

For i = 0 To FrmCot.DGVCOT.Rows.Count - 1
With FrmCot.DGVCOT.Rows(i)
valor = String.Format([Ô]({0},{1},{2},{3},{4},{5},{6}),[Ô], Trim(numped), .Cells(0).Value, .Cells(1).Value, .Cells(2).Value, .Cells(3).Value, FormatDateTime(Now, DateFormat.GeneralDate), Trim(codempresa))
valores.Append(valor)


End With
Next i

valor = valores.ToString().Substring(1, valores.ToString().Length - 1)


Try
myCMD = New MySql.Data.MySqlClient.MySqlCommand([Ô]INSERT INTO COTACAO (cotNUMPED, cotidprod, cotdesc, cotEMB, cotQT, cotDATA, cotEMPRESA) VALUES ([ô][Ô] & valor & [Ô][ô])[Ô], myCON)
myDRR = myCMD.ExecuteReader()
myDRR.Close()
myCMD.Dispose()

DisconnectMySQL()

Label2.Text = [Ô][Ô]
Button2.Enabled = True
Button3.Enabled = False

MsgBox([Ô]Enviando com sucesso![Ô], vbInformation, [Ô]Enviando dados p/ web[Ô])


Catch ex As Exception

DisconnectMySQL()

MsgBox([Ô]Erro [Ô] & vbCrLf & ex.ToString, MsgBoxStyle.Critical, [Ô]Erro na gravação[Ô])

End Try

End Sub

agradeço ajuda, desde ja.

agora vou dormir com essa... rsrsssrs ja sao 02:28:00 (madruga)

ROBSON220BASS 26/05/2012 12:11:35
#402866
Pessoal, por favor alguem pra me da uma luz

alguem por favor...


Obrigado!

ROBSON220BASS 28/05/2012 09:52:49
#402941
me ajude por favor....
Tópico encerrado , respostas não são mais permitidas