Я пытаюсь создать более настольное приложение, используя vb.net 2008. Я пытаюсь этот код
Уровень представления
Imports System
Imports System.ComponentModel
Imports System.Data
Imports System.Data.OleDb
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports Pos.Pos.BLL
Imports Pos.Pos.DAL
Imports System.Xml
Imports System.Collections.Generic
Public Class frmLogin
Private user As New User()
Private CnnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data " + "Source= " + Application.StartupPath + "\pos.accdb;Jet OLEDB:Database Password=pos"
Private cnn As New OleDbConnection()
Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click
'Try
'menu = user.getMenu()
Dim menu As New List(Of String)
If cnn.State = ConnectionState.Open Then
cnn.Close()
End If
Try
Dim jabatan As String = user.login(txtUser.Text, txtPassword.Text)
MsgBox(jabatan)
menu = user.getMenu(jabatan)
'Dim strCommand As String = "select Menu from tblJabatan where JabatanName='" + jabatan + "'"
'cnn.ConnectionString = CnnStr
'cnn.Open()
'Dim Comm As New OleDbCommand(strCommand, cnn)
'Dim dr As OleDbDataReader = Comm.ExecuteReader
'Do While dr.Read
'menu.Add(dr(0).ToString)
'Loop
If Not menu Is Nothing Then
For Each Str As String In menu
MsgBox(Str)
Next
Else
MsgBox("Tidak ditemukan data")
End If
Catch ex As Exception
Throw ex
End Try
End Sub
End Class
Бизнес-уровень
Public Class User
Private User As New daUser()
Private m_UserID As Integer
Private m_User As String
Private m_Pwd As String
Private m_Jabatan As String
Public Sub New()
MyBase.New()
End Sub
'''<summary>
'''ID User
'''</summary>
Public Property UserID() As Integer
Get
Return m_UserID
End Get
Set(ByVal value As Integer)
m_UserID = value
End Set
End Property
'''<summary>
'''Username
'''</summary>
Public Property Username() As String
Get
Return m_User
End Get
Set(ByVal value As String)
m_UserID = value
End Set
End Property
'''<summary>
'''Password
'''</summary>
Public Property Password() As String
Get
Return m_Pwd
End Get
Set(ByVal value As String)
m_Pwd = value
End Set
End Property
'''<summary>
'''Jabatan
'''</summary>
Public Property Jabatan() As String
Get
Return m_Jabatan
End Get
Set(ByVal value As String)
m_Jabatan = value
End Set
End Property
Public Sub add()
User.add(Me)
End Sub
Public Function login(ByVal Username As String, ByVal Password As String) As String
Return User.Login(Username, Password)
End Function
Public Function getMenu(ByVal Jabatan As String) As List(Of String)
Return User.getMenu(Jabatan)
End Function
End Class
Уровень данных
Public Class daUser
Public Sub New()
cnn.ConnectionString = CnnStr
cnn.Open()
End Sub
Public Function Login(ByVal username As String, ByVal password As String) As String
'Dim role As String
If cnn.State = ConnectionState.Open Then
cnn.Close()
End If
Try
Dim strCom As String = "select Jabatan from tblUser where Username='" + username + "' and Password='" + password + "'"
cnn.ConnectionString = CnnStr
cnn.Open()
Dim Comm As New OleDbCommand(strCom, cnn)
Dim dr As OleDbDataReader = Comm.ExecuteReader
While dr.Read
role = dr(0).ToString
End While
cnn.Close()
Catch ex As Exception
Return ex.ToString
Finally
End Try
Return role
End Function
Public Function getMenu(ByVal jabatan As String) As List(Of String)
If cnn.State = ConnectionState.Open Then
cnn.Close()
End If
Try
Dim strCommand As String = "select Menu from tblJabatan where JabatanName='" + jabatan + "'"
cnn.ConnectionString = CnnStr
cnn.Open()
Dim Comm As New OleDbCommand(strCommand, cnn)
Dim dr As OleDbDataReader = Comm.ExecuteReader
While dr.Read
menu.Add(dr("Menu").ToString)
End While
cnn.Close()
Catch er As OleDb.OleDbException
Catch ex As Exception
Finally
End Try
Return menu
End Function
End Class
Когда я запускаю его, мне выдается это предупреждение
System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта
в Pos.frmLogin.btnLogin_Click (Отправитель объекта, EventArgs e) в C: \ Documents and Settings \ Администратор \ Мои документы \ Visual Studio 2008 \ Projects
\ POS \ Pos \ Form \ frmLogin.vb: строка 39
Пожалуйста, укажите мне, какую ошибку я допустил и как ее исправить
Код ошибки:
For Each Str As String In menu
MsgBox(Str)
Next
Кстати, чего я хочу добиться, так это как получить данные в виде списка (из строки), потому что, если я помещу функцию getMenu непосредственно на уровень представления, она выдаст мне данные, как я и ожидал. я возвращаю в виде строки вместо List (Of String), он дает мне единственные данные.
Спасибо ... * * 1023