ProgressBar non va in esecuzione da Visual Studio 2005

martedì 28 ottobre 2008 - 16.28

Mau67 Profilo | Expert

Buon pomeriggio ho un problema con la mia progressbar.

Ho costruito un semplice form da dove seleziono un file.txt dove all'interno ci sono circa 70.000 record e li trasferisco all'interno della mia tabella in sqlserver 2005 express, il problema che quando clicco sul tasto importa la progressbar non parte, praticamente il processo di trasferimento dei dati non permette l'esecuzione della progressbar vi posto il codice che ho usato per trasferire i dati e l'invio della progressbar dove sbaglio?

Grazie in anticipo.

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Collections.Generic
Imports System.Text
Imports System.IO

Public Class CaricaBanche

' file letto in input
Dim fileInput As StreamReader

' Dichiaro stringa di connessione database...
Private FILE_NAME = IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath.ToString).ToString & "\myConnectionString.txt"



Dim objDataReader As System.Data.SqlClient.SqlDataReader
Dim cmd As New System.Data.SqlClient.SqlCommand


Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click

' mostro la dialog per aprire il file
OFD.ShowDialog(Me)
' imposto nella textbox il nome del file
txtFileInput.Text = OFD.FileName
' leggo il file e lo tengo nello stream reader
If Not String.IsNullOrEmpty(OFD.FileName) Then fileInput = New StreamReader(OFD.OpenFile())

End Sub

Private Sub CaricaBanche_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

ProgressBar1.Maximum = 100
ProgressBar1.Minimum = 0
ProgressBar1.Value = 0


End Sub



Private Sub btnImporta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImporta.Click


If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
Me.ToolStripStatusLabel2.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()


Dim objConnection As New SqlConnection(sqlString)

Timer1.Start()


Me.Cursor = Cursors.WaitCursor

Me.ImportToDB(sqlString)

Me.Cursor = Cursors.Arrow

MessageBox.Show("OK FLUSSO CARICATO", "CONFERMA", MessageBoxButtons.OK, MessageBoxIcon.Information)

End Sub

Private Sub ImportToDB(ByVal ConnString As String)



If Not File.Exists(FILE_NAME) Then
MsgBox(FILE_NAME & " Stringa di connessione mancante.")
Return
End If
Dim sr As StreamReader = File.OpenText(FILE_NAME)
Dim sqlString As String
sqlString = sr.ReadLine()
Me.ToolStripStatusLabel2.Text = (sqlString) 'Questo è solo per verificare!
sr.Close()

Dim objConnection As New SqlConnection(sqlString)

' apro la connessione
objConnection.Open()

Using objCmd As New SqlCommand("dbo.proc_BancaUpsert", objConnection)

' tipo stored procedure
objCmd.CommandType = CommandType.StoredProcedure

' ciclo il file
While Not fileInput.EndOfStream

Dim Row As MyRow = Me.GetRow(fileInput.ReadLine())

' genero il comando


' assegno i parametri alla stored procedure
objCmd.Parameters.Add("@Abi", SqlDbType.VarChar, 5).Value = Row.Abi
objCmd.Parameters.Add("@IstitutoCredito", SqlDbType.VarChar, 50).Value = Row.IstitutoCredito
objCmd.Parameters.Add("@Cab", SqlDbType.VarChar, 5).Value = Row.Cab
objCmd.Parameters.Add("@Agenzia", SqlDbType.VarChar, 50).Value = Row.Agenzia
objCmd.Parameters.Add("@IndirizzoIstituto", SqlDbType.VarChar, 50).Value = Row.IndirizzoIstituto
objCmd.Parameters.Add("@LuogoIstituto", SqlDbType.VarChar, 50).Value = Row.LuogoIstituto
objCmd.Parameters.Add("@Cap", SqlDbType.VarChar, 5).Value = Row.Cap
objCmd.Parameters.Add("@Prov", SqlDbType.VarChar, 5).Value = Row.Prov



' eseguo il comando
objCmd.ExecuteNonQuery()

' pulisco la collezione dei parametri
objCmd.Parameters.Clear()

End While

End Using

objConnection.Close()


End Sub

''' <summary>
''' scompone la riga in campi di una classe
''' </summary>
Private Function GetRow(ByVal Row As String) As MyRow

' splitto la riga per il carattere ;
Dim columns As String() = Row.Split(";"c)

' nuova istanza della riga dell "tabella"
Dim objRow As New MyRow

Dim pAbi As String = String.Empty
Dim pIstitutoCredito As String = String.Empty
Dim pCab As String = String.Empty
Dim pAgenzia As String = String.Empty
Dim pIndirizzoIstituto As String = String.Empty
Dim pLuogoIstituto As String = String.Empty
Dim pCap As String = String.Empty
Dim pProv As String = String.Empty


If Not String.IsNullOrEmpty(columns(0)) Then
pAbi = columns(0)
End If
If Not String.IsNullOrEmpty(columns(1)) Then
pIstitutoCredito = columns(1)
End If
If Not String.IsNullOrEmpty(columns(2)) Then
pCab = columns(2)
End If
If Not String.IsNullOrEmpty(columns(3)) Then
pAgenzia = columns(3)
End If
If Not String.IsNullOrEmpty(columns(4)) Then
pIndirizzoIstituto = columns(4)
End If
If Not String.IsNullOrEmpty(columns(5)) Then
pLuogoIstituto = columns(5)
End If
If Not String.IsNullOrEmpty(columns(6)) Then
pCap = columns(6)
End If
If Not String.IsNullOrEmpty(columns(7)) Then
pProv = columns(7)
End If

' assegno i valori ai campi (qui è gestito il valore NULL)
objRow.IDBanca = columns(0)
objRow.Abi = pAbi
objRow.IstitutoCredito = pIstitutoCredito
objRow.Cab = pCab
objRow.Agenzia = pAgenzia
objRow.IndirizzoIstituto = pIndirizzoIstituto
objRow.LuogoIstituto = pLuogoIstituto
objRow.Cap = pCap
objRow.Prov = pProv


Return objRow

End Function

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If ProgressBar1.Value = 100 Then
ProgressBar1.Value = 0
End If
ProgressBar1.Value = ProgressBar1.Value + 1
End Sub


End Class
Mau67

sergio58 Profilo | Junior Member

Devi impostare la proprietà interval del timer.
Es. Interval=1000

alexmed Profilo | Guru

Ciao Mau67
Non vorrei farti perdere tempo ma proverei un'altro "accroccrio".

ProgressBar1.Maximum = 70000
ProgressBar1.Minimum = 0
ProgressBar1.Value = 0

Poi qui

nuova istanza della riga dell "tabella"
Dim objRow As New MyRow

Dim pAbi As String = String.Empty
Dim pIstitutoCredito As String = String.Empty
Dim pCab As String = String.Empty


sotto
Dim objRow As New MyRow
che se ho interpretato bene aggiunge una riga metterei

ProgressBar1.Value += 1

eventualmente seguito da un
Application.DoEvents()

Senza l'uso del Timer

Ciao

Mau67 Profilo | Expert

Grazie alex è perfetto ciao
Mau67

alexmed Profilo | Guru

CIao
Prego
tra l'altro se è lo stesso file che ho io dovrebbe bastare ProgressBar1.Maximum = 62500
Ciao
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5