Hallo,
bin neu hier und hab gerad erst mit VB.NET angefangen.
Jetzt steh ich gerad vor einem Problem und komme nicht weiter.
Ich möchte für Geschwindigkeitstests eine riesige Menge an Datensätzen über eine Schleife in eine Access Datenbank schreiben lassen, nur bricht die Schleife das Schreiben immer zufällig an unterschiedlichen Stellen ab.
Mal beim 1072 Datensatz, oder schon beim 12.
Ich kann mir das nicht erklären, hab auch schon ein bischen mit Threadbefehlen rumprobiert, aber bis jetzt hat noch nix funktioniert.
Könnte mir vielleicht jemand erklären wo mein Fehler liegt?
Hier der Code:
[highlight=vbnet]
Imports System.Data.OleDb
Imports System.Threading
Public Class Form1
Private Shared dbpath As String = System.IO.Path.Combine(Application.StartupPath, _
"C:\Visual Studio 2010\Projects\Lizenzformular\lizenz_test_db.mdb")
Private Shared conn As New OleDbConnection(_
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbpath & ";")
Private sql As String = "SELECT * FROM Lizenz;"
Private cmd As New OleDbCommand(sql, conn)
Private da As New OleDbDataAdapter(cmd)
Private ds As New DataSet
Private Sub Load_Table() Handles MyBase.Load
Try
'Verbindung zur Datenbank öffnen
conn.Open()
'Inhalte des Dataset zunächst löschen
ds.Clear()
'Dataset mit der Tabelle Users füllen
da.Fill(ds, "Lizenz")
da.Fill(ds, sql)
'Datagrid anbinden
DataGridView1.DataSource = ds.Tables("Lizenz")
'Combobox anbinden
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)
Dim dt2 As DataTable = ds.Tables("Lizenz")
Catch ex As OleDbException
MessageBox.Show(ex.Message, "Fehler", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Finally
'Verbindung zur Datenbank auf jeden Fall wieder schließen
conn.Close()
End Try
End Sub
Private Sub Zählen()
'
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)
Dim rZahl As New System.Random
Dim rZahl1 As New System.Random
Dim rZahl2 As New System.Random
Dim rZahl3 As New System.Random
Dim rZahl4 As New System.Random
Dim rZahl5 As New System.Random
Dim rZahl6 As New System.Random
Dim row2 As DataRow
Dim dt As DataTable = ds.Tables("Lizenz")
Dim control As Integer
Dim zahl As Integer
Dim strUser As Integer, strNr As Integer, strVar As Integer, _
strZahl As Integer, strFrei As Integer
Try
'Im DataSet einen neuen Datensatz hinzufügen
'Der Tabelle eine neue DataRow hinzufügen
For i As Integer = 1 To 10000
Dim row As DataRow = ds.Tables("Lizenz").NewRow
'Werte übergeben KNr
Do
strUser = rZahl.Next(500000, 1500000)
For Each row2 In dt.Rows
If row2!KNr = strUser Then
control = 1
Exit For
End If
Next
If Not control = 1 Then
row("KNr") = strUser
Exit Do
End If
Loop
'Werte übergeben ProgrammNr
strNr = rZahl2.Next(0, 3)
row("ProgrammNr") = strNr
'Werte übergeben ProgrammVariante
strVar = rZahl3.Next(0, 5)
row("ProgrammVariante") = strVar
'Werte übergeben Programm
zahl = rZahl4.Next(0, 4)
Select Case (zahl)
Case 0
row("Programm") = "CC 1"
Case 1
row("Programm") = "CC 2"
Case 2
row("Programm") = "CC 3"
Case 3
row("Programm") = "CC 4"
End Select
'Werte übergeben Prüfzahl
strZahl = rZahl5.Next(0, 10000000)
row("Prüfzahl") = strZahl
'Werte übergeben Freigabe
strFrei = rZahl6.Next(0, 10000000)
row("Freigabe") = strFrei
ds.Tables("Lizenz").Rows.Add(row)
'Datenbank updaten
da.Update(ds, "Lizenz")
Debug.WriteLine("Datensatz " + i.ToString + "eingefügt!")
Thread.Sleep(100)
Next
MessageBox.Show("Datensätze hinzugefügt!", "Neuer Datensatz", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch e As Exception
MessageBox.Show(e.ToString)
Finally
conn.Close()
End Try
End Sub
Private Sub Hinzufuegen_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnInsert.Click
Dim Thread As New Threading.Thread(AddressOf Zählen)
Thread.Priority = ThreadPriority.Normal
Thread.Start()
End Sub
End Class
[/highlight]
bin neu hier und hab gerad erst mit VB.NET angefangen.
Jetzt steh ich gerad vor einem Problem und komme nicht weiter.
Ich möchte für Geschwindigkeitstests eine riesige Menge an Datensätzen über eine Schleife in eine Access Datenbank schreiben lassen, nur bricht die Schleife das Schreiben immer zufällig an unterschiedlichen Stellen ab.
Mal beim 1072 Datensatz, oder schon beim 12.
Ich kann mir das nicht erklären, hab auch schon ein bischen mit Threadbefehlen rumprobiert, aber bis jetzt hat noch nix funktioniert.
Könnte mir vielleicht jemand erklären wo mein Fehler liegt?
Hier der Code:
[highlight=vbnet]
Imports System.Data.OleDb
Imports System.Threading
Public Class Form1
Private Shared dbpath As String = System.IO.Path.Combine(Application.StartupPath, _
"C:\Visual Studio 2010\Projects\Lizenzformular\lizenz_test_db.mdb")
Private Shared conn As New OleDbConnection(_
"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbpath & ";")
Private sql As String = "SELECT * FROM Lizenz;"
Private cmd As New OleDbCommand(sql, conn)
Private da As New OleDbDataAdapter(cmd)
Private ds As New DataSet
Private Sub Load_Table() Handles MyBase.Load
Try
'Verbindung zur Datenbank öffnen
conn.Open()
'Inhalte des Dataset zunächst löschen
ds.Clear()
'Dataset mit der Tabelle Users füllen
da.Fill(ds, "Lizenz")
da.Fill(ds, sql)
'Datagrid anbinden
DataGridView1.DataSource = ds.Tables("Lizenz")
'Combobox anbinden
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)
Dim dt2 As DataTable = ds.Tables("Lizenz")
Catch ex As OleDbException
MessageBox.Show(ex.Message, "Fehler", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Finally
'Verbindung zur Datenbank auf jeden Fall wieder schließen
conn.Close()
End Try
End Sub
Private Sub Zählen()
'
Dim cb As OleDbCommandBuilder = New OleDbCommandBuilder(da)
Dim rZahl As New System.Random
Dim rZahl1 As New System.Random
Dim rZahl2 As New System.Random
Dim rZahl3 As New System.Random
Dim rZahl4 As New System.Random
Dim rZahl5 As New System.Random
Dim rZahl6 As New System.Random
Dim row2 As DataRow
Dim dt As DataTable = ds.Tables("Lizenz")
Dim control As Integer
Dim zahl As Integer
Dim strUser As Integer, strNr As Integer, strVar As Integer, _
strZahl As Integer, strFrei As Integer
Try
'Im DataSet einen neuen Datensatz hinzufügen
'Der Tabelle eine neue DataRow hinzufügen
For i As Integer = 1 To 10000
Dim row As DataRow = ds.Tables("Lizenz").NewRow
'Werte übergeben KNr
Do
strUser = rZahl.Next(500000, 1500000)
For Each row2 In dt.Rows
If row2!KNr = strUser Then
control = 1
Exit For
End If
Next
If Not control = 1 Then
row("KNr") = strUser
Exit Do
End If
Loop
'Werte übergeben ProgrammNr
strNr = rZahl2.Next(0, 3)
row("ProgrammNr") = strNr
'Werte übergeben ProgrammVariante
strVar = rZahl3.Next(0, 5)
row("ProgrammVariante") = strVar
'Werte übergeben Programm
zahl = rZahl4.Next(0, 4)
Select Case (zahl)
Case 0
row("Programm") = "CC 1"
Case 1
row("Programm") = "CC 2"
Case 2
row("Programm") = "CC 3"
Case 3
row("Programm") = "CC 4"
End Select
'Werte übergeben Prüfzahl
strZahl = rZahl5.Next(0, 10000000)
row("Prüfzahl") = strZahl
'Werte übergeben Freigabe
strFrei = rZahl6.Next(0, 10000000)
row("Freigabe") = strFrei
ds.Tables("Lizenz").Rows.Add(row)
'Datenbank updaten
da.Update(ds, "Lizenz")
Debug.WriteLine("Datensatz " + i.ToString + "eingefügt!")
Thread.Sleep(100)
Next
MessageBox.Show("Datensätze hinzugefügt!", "Neuer Datensatz", _
MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch e As Exception
MessageBox.Show(e.ToString)
Finally
conn.Close()
End Try
End Sub
Private Sub Hinzufuegen_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnInsert.Click
Dim Thread As New Threading.Thread(AddressOf Zählen)
Thread.Priority = ThreadPriority.Normal
Thread.Start()
End Sub
End Class
[/highlight]
Comment