初学vb.net开发 尝试开发一个进销存软件 有很多方法不熟悉 求指正和帮助 (连载1 登录窗口)
因为初次尝试转用vb.net编程 对很多方法非常生疏 比方说数据库 我看了半天书只看懂了用dataTable 使用起来和以前完全是两种感觉 有种很不顺手的感觉 所以又想到了csdn
我是真心来求学 如果我的提问方式有什么问题的话也请大家指出来 以便我改正
我还是详细的把我的代码贴出来 祈大家教我
首先我准备从登录窗口入手
我画了一个登录窗口 如下图
然后建数据库
表名 UserLog 用来保存登录的历史记录 结构如下
表名 管理员 结构如下
然后下面奉上Login.vb的代码
Public Class Login Private daLogin As OleDb.OleDbDataAdapter Private cbLogin As OleDb.OleDbCommandBuilder Private dtLogin As DataTable Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click '点击退出按钮 Me.Close() End Sub Private Sub btnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLogin.Click '点击登录按钮 CheckLogin() End Sub Private Sub CheckLogin() '核对账号和密码 Dim Found As Boolean Dim i As Integer Dim errMessage As String = "该账号不存在" cboUser.Focus() cboUser.SelectAll() For i = 0 To dtAdmin.Rows.Count - 1 If dtAdmin.Rows(i)("用户名").ToString = cboUser.Text Then If dtAdmin.Rows(i)("密码").ToString = txtPassword.Text Then Found = True AdminIndex = i Exit For Else errMessage = "密码错误" txtPassword.Focus() txtPassword.SelectAll() End If End If Next i If Found Then '登录成功 AddUserLog(i) '添加登录历史记录 mdiMain.Show() '载入主界面 LoginOk = True Me.Close() Else MessageBox.Show(errMessage, "错误提示") End If End Sub Private Sub AddUserLog(ByVal Index As Integer) '添加到登录记录 Dim loginIndex As Integer = cboUser.FindStringExact(cboUser.Text) If loginIndex > -1 Then dtLogin.Rows(loginIndex)("password") = dtAdmin.Rows(Index)("密码") dtLogin.Rows(loginIndex)("lasttime") = Now dtLogin.Rows(loginIndex)("savepass") = chkRemember.Checked dtLogin.Rows(loginIndex)("autolog") = chkAutoLog.Checked Else Dim NR As DataRow = dtLogin.NewRow() NR("UserName") = dtAdmin.Rows(Index)("用户名") NR("PassWord") = dtAdmin.Rows(Index)("密码") NR("LastTime") = Now NR("SavePass") = chkRemember.Checked NR("AutoLog") = chkAutoLog.Checked dtLogin.Rows.Add(NR) End If daLogin.Update(dtLogin) End Sub Private Sub Login_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing '窗体关闭 dtLogin.Dispose() cbLogin.Dispose() daLogin.Dispose() If Not LoginOk Then '如果未登录 dtAdmin.Dispose() cbAdmin.Dispose() daAdmin.Dispose() Conn.Dispose() End If End Sub Private Sub Login_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load OpenConn() '连接数据库 ListLastUsers() '列出最后登录的用户列表 If Not LoginOk Then LoadAdmin() '装入管理员数据 Conn.Close() '关闭数据库 If chkAutoLog.Checked And Not LoginOk Then CheckLogin() '如果自动登录则登录 End Sub Private Sub ListLastUsers() '列出最后一次登录的用户 Sql = "select * from UserLog order by LastTime desc" daLogin = New OleDb.OleDbDataAdapter(Sql, Conn) cbLogin = New OleDb.OleDbCommandBuilder(daLogin) '========对Access数据库保留字的处理=========== cbLogin.QuotePrefix = "[" cbLogin.QuoteSuffix = "]" '===================================== dtLogin = New DataTable daLogin.Fill(dtLogin) If dtLogin.Rows.Count > 0 Then For i = 0 To dtLogin.Rows.Count - 1 cboUser.Items.Add(dtLogin.Rows(i)("UserName")) Next i cboUser.SelectedIndex = 0 End If End Sub Private Sub cboUser_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cboUser.SelectedIndexChanged '当用户改变时 根据数据库改变控件状态 chkRemember.Checked = CBool(dtLogin.Rows(cboUser.SelectedIndex)("savepass")) If chkRemember.Checked Then chkAutoLog.Checked = CBool(dtLogin.Rows(cboUser.SelectedIndex)("autolog")) txtPassword.Text = dtLogin.Rows(cboUser.SelectedIndex)("Password").ToString End If End Sub Private Sub chkRemember_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkRemember.CheckedChanged '如果选了记住密码才显示自动保存 If chkRemember.Checked Then chkAutoLog.Enabled = True Else chkAutoLog.Enabled = False End If End Sub Private Sub btnRemove_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemove.Click '点击移除当前登录记录 dtLogin.Rows(cboUser.SelectedIndex).Delete() cboUser.Items.RemoveAt(cboUser.SelectedIndex) btnRemove.Enabled = False txtPassword.Text = "" chkRemember.Checked = False chkAutoLog.Checked = False daLogin.Update(dtLogin) End Sub Private Sub cboUser_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboUser.TextChanged '文字改变时调整相应控件 If cboUser.FindStringExact(cboUser.Text) > -1 Then btnRemove.Enabled = True Else btnRemove.Enabled = False txtPassword.Text = "" chkRemember.Checked = False chkAutoLog.Checked = False End If End SubEnd Class
Public LoginOk As Boolean '登录成功 Public AdminIndex As Integer '管理员索引 Public Conn As OleDbConnection Public daAdmin As OleDbDataAdapter Public cbAdmin As OleDbCommandBuilder Public dtAdmin As DataTable Public Sql As String Public Sub OpenConn() Conn = New OleDbConnection Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Data.mdb" Conn.Open() End Sub Public Sub LoadAdmin() Sql = "select * from 管理员" daAdmin = New OleDbDataAdapter(Sql, Conn) cbAdmin = New OleDbCommandBuilder(daAdmin) dtAdmin = New DataTable daAdmin.Fill(dtAdmin) AddHandler daAdmin.RowUpdated, New OleDbRowUpdatedEventHandler(AddressOf OnRowUpdated) End Sub Private Sub OnRowUpdated(ByVal sender As Object, ByVal args As OleDbRowUpdatedEventArgs) Dim newID As Integer = 0 Dim idCMD As OleDbCommand = New OleDbCommand("SELECT @@IDENTITY", Conn) If args.StatementType = StatementType.Insert Then newID = CInt(idCMD.ExecuteScalar()) args.Row("ID") = newID End If End Sub