2017-08-31 2 views
0

Ich habe 11 Access-Datenbank-Dateien mit jeweils 20 Elementen Lese, die in lokalen Variablen wie RejRsnStn (i) (Grund) gespeichert werden muss, wo i für Stationsnummer steht 1 bis 11 & Grund steht für Grund 1 bis 20.mehr Daten aus mehreren Datenbanken in vb.Net

ich diese Daten in folgender Weise zu lesen:

Public Sub ReadReasonCodes() 
    'Station 1 
    For Reason = 1 To 20 
     DatafileStn = "E:\DATANetwork\DATAStation_1.accdb;Jet OLEDB:Database Password=xxxxxxxx" 
     Dim ConnstringStn As String = provider & DatafileStn 
     connstringwrkstn = ConnstringStn 
     myConnection.ConnectionString = ConnstringStn 
     myConnection.Open() 

     str = "SELECT * FROM Table_Config WHERE StationNo = 1" 
     cmd = New OleDbCommand(str, myConnection) 
     dr = cmd.ExecuteReader 

     While dr.Read() 
      RejRsnStn1(Reason) = If(IsDBNull(dr("RejectionReason" & Reason)), "NA", dr("RejectionReason" & Reason)) 
     End While 
     myConnection.Close() 
    Next 

    'Station 2 
    For Reason = 1 To 20 
     DatafileStn = "E:\DATANetwork\DATAStation_2.accdb;Jet OLEDB:Database Password=xxxxxxxx" 
     Dim ConnstringStn As String = provider & DatafileStn 
     connstringwrkstn = ConnstringStn 
     myConnection.ConnectionString = ConnstringStn 
     myConnection.Open() 

     str = "SELECT * FROM Table_Config WHERE StationNo = 2" 
     cmd = New OleDbCommand(str, myConnection) 
     dr = cmd.ExecuteReader 

     While dr.Read() 
      RejRsnStn2(Reason) = If(IsDBNull(dr("RejectionReason" & Reason)), "NA", dr("RejectionReason" & Reason)) 
     End While 
     myConnection.Close() 
    Next 

End Sub 

können Sie bitte leite mich mit einem kurzen metho d.

Vielen Dank im Voraus. Prashant.

+1

Verschieben Sie alle Verbindungselemente außerhalb der Schleifen. – Gustav

+0

es macht mir keine Ahnung, dass Sie eine Schleife für den Ursachencode verwenden, aber absolut nicht für die Stations-ID verwenden. –

+0

Ich stimme diese Frage als off-topic zu schließen, weil nein, Sie können nicht Codez Codec. –

Antwort

1

Ich würde so etwas tun:

Zuerst habe ich System.Data.OleDb importieren würde und dann eine Klasse konstruieren alle Codes enthalten:

Imports System.Data.OleDb 
Public Class rCode 
    Dim _ReasonCode As String = "" 
    Public Property ReasonCode() As String 
     Get 
      Return _ReasonCode 
     End Get 
     Set(value As String) 
     _ReasonCode = value 
     End Set 
    End Property 
End Class 

Public Class RCodes 
    Public Property Station_1_Reasoncodes As New List(Of rCode) 
    Public Property Station_2_Reasoncodes As New List(Of rCode) 
    Public Property Station_3_Reasoncodes As New List(Of rCode) 
    Public Property Station_4_Reasoncodes As New List(Of rCode) 
    Public Property Station_5_Reasoncodes As New List(Of rCode) 
    Public Property Station_6_Reasoncodes As New List(Of rCode) 
    Public Property Station_7_Reasoncodes As New List(Of rCode) 
    Public Property Station_8_Reasoncodes As New List(Of rCode) 
    Public Property Station_9_Reasoncodes As New List(Of rCode) 
    Public Property Station_10_Reasoncodes As New List(Of rCode) 
    Public Property Station_11_Reasoncodes As New List(Of rCode) 
End Class 

Dann würde ich die Klasse initiieren ich nur erstellt:

public class form1 
    Public ReasonCodes As RCodes = New RCodes 

Dann würde ich ein Unterprogramm macht die zwanzig Codes aus einer Datenbank zu erhalten:

public class form1 
    Public ReasonCodes As RCodes = New RCodes 

    Public Sub GetReasonCodes(station As String) 
    Dim Provider As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" 
    Dim myConnection As New OleDbConnection 
    Dim DatafileStn As String = "E:\DATANetwork\DATAStation_" & station & ".accdb;Jet OLEDB:Database Password=xxxxxxxx" 
    Dim ConnstringStn As String = Provider & DatafileStn 
    myConnection.ConnectionString = ConnstringStn 
    myConnection.Open() 
    Dim cmd As New OleDbCommand("SELECT * FROM Table_Config WHERE StationNo = " & station, myConnection) 
    Dim dr As OleDbDataReader = cmd.ExecuteReader 
    Dim s As rCode = New rCode 
    Dim s2 As New List(Of rCode) 
    While dr.Read() 
     For Reason = 1 To 20 
      If IsDBNull(dr("RejectionReason" & CStr(Reason))) Then s.ReasonCode = "NA" Else s.ReasonCode = CStr(dr("RejectionReason" & CStr(Reason))) 
      s2.Add(s) 
     Next 
    End While 
    If Not dr.IsClosed Then dr.Close() 
    myConnection.Close() 
    dr = Nothing 
    myConnection = Nothing 
    Select Case station 
     Case "1" 
      ReasonCodes.Station_1_Reasoncodes = s2 
     Case "2" 
      ReasonCodes.Station_2_Reasoncodes = s2 
     Case "3" 
      ReasonCodes.Station_3_Reasoncodes = s2 
     Case "4" 
      ReasonCodes.Station_4_Reasoncodes = s2 
     Case "5" 
      ReasonCodes.Station_5_Reasoncodes = s2 
     Case "6" 
      ReasonCodes.Station_6_Reasoncodes = s2 
     Case "7" 
      ReasonCodes.Station_7_Reasoncodes = s2 
     Case "8" 
      ReasonCodes.Station_8_Reasoncodes = s2 
     Case "9" 
      ReasonCodes.Station_9_Reasoncodes = s2 
     Case "10" 
      ReasonCodes.Station_10_Reasoncodes = s2 
     Case "11" 
      ReasonCodes.Station_11_Reasoncodes = s2 
    End Select 
End Sub 

Dann würde ich den Initiator machen:

Public Sub ReadReasonCodes() 
     For i As Integer = 1 To 11 
      GetReasonCodes(CStr(i)) 
     Next 
    End Sub 
End Class 

Sie Ihre Daten aus der Klasse "Reason"

EXA zugreifen:

Dim Stn6_code15 = ReasonCodes.Station_6_Reasoncodes(14).ReasonCode 
'Note: since reasoncodes are stored in an Array, they are 0 based. 
'So ReasonCodes.Station_6_Reasoncodes(14).ReasonCode = 
'station 6, reason code 15. 

Natürlich kann ich nicht testen dies, da ich keine DB-Dateien zugreifen kann, aber es sollte funktionieren, und wenn nicht, können kleinere Änderungen erforderlich sein, um Ihr Ziel zu erreichen.

Hoffe das hilft dir.

Verwandte Themen