【发布时间】:2021-10-27 21:19:22
【问题描述】:
我查看了以前提出的此类问题,但没有一个解决方案对我有用。
我在更新 Access 数据库中的 Boolean 列时遇到问题。但是该查询在 Access 中运行良好。
我已经尝试过的:
- 在
SqlCommand中直接使用TRUE或FALSE - 使用
Parameters.Add()代替Parameters.AddWithValue()
我的ClickEvent:
Private Sub Update_Click(sender As Object, e As RoutedEventArgs) Handles btn_update.Click
Dim mc As New UsersModule() With {
.UserID = tbx_userid.Text,
.UserName = tbx_username.Text,
.UserPassword = tbx_password.Text,
.UserRole = combx_role.SelectedValue.ToString,
.UserFullname = tbx_fullname.Text,
.UserActive = cbx_active.IsChecked
}
Dim bridge As New UsersBridge()
If bridge.UpdateUser(mc) Then
MsgBox("User's Data Updated Successfully")
Else
MsgBox("Something went wrong :/")
End If
End Sub
我的模块类:
Public Class UsersModule
Private ID As Integer, Name As String, Pass As String, Role As String, Fullname As String, isActive As Boolean
Public Property UserID() As Integer
Get
Return ID
End Get
Protected Friend Set(value As Integer)
ID = value
End Set
End Property
Public Property UserName() As String
Get
Return Name
End Get
Protected Friend Set(value As String)
Name = value
End Set
End Property
Public Property UserPassword() As String
Get
Return Pass
End Get
Protected Friend Set(value As String)
Pass = value
End Set
End Property
Public Property UserRole() As String
Get
Return Role
End Get
Protected Friend Set(value As String)
Role = value
End Set
End Property
Public Property UserFullname() As String
Get
Return Fullname
End Get
Protected Friend Set(value As String)
Fullname = value
End Set
End Property
Public Property UserActive() As Boolean
Get
Return isActive
End Get
Protected Friend Set(value As Boolean)
isActive = value
End Set
End Property
End Class
我的桥牌课程:
Public Class Accounts_Bridge
Shared conStr As String = Windows.Application.Current.FindResource("connectionString")
Public Function Update(mc As AccountsData) As Boolean
Dim con As New OleDb.OleDbConnection(conStr)
Dim isSuccessful As Boolean = False
Try
Dim sql As String = "UPDATE Users SET UserName = @user, UserPassword = @pass, UserRole = @role, UserFullname = @name, UserActive = @active WHERE UserID = @id"
Dim cmd As New OleDb.OleDbCommand(sql, con)
cmd.Parameters.Add("@id", OleDbType.Integer).Value = mc.UserID
cmd.Parameters.Add("@user", OleDbType.VarChar).Value = mc.UserName
cmd.Parameters.Add("@pass", OleDbType.VarChar).Value = mc.UserPassword
cmd.Parameters.Add("@role", OleDbType.VarChar).Value = mc.UserRole
cmd.Parameters.Add("@name", OleDbType.VarChar).Value = mc.UserFullname
cmd.Parameters.Add("@active", OleDbType.Boolean).Value = mc.UserActive
con.Open()
Dim i As Integer = cmd.ExecuteNonQuery() 'Always Returns 0
If i > 0 Then
isSuccessful = True
Else
isSuccessful = False
End If
Catch ex As Exception
MsgBox(ex.Message)
Finally
con.Close()
End Try
Return isSuccessful
End Function
End Class
【问题讨论】:
-
您是否尝试过调试您的 Bridge 类? mc 变量有值吗?
-
是的,我确实调试了我的 Bridge 类,并且确实收到了 mc 变量中的值。 @ErrBon
-
顺便说一下,您可以将
If i > 0 Then... End If缩短为isSuccessful = i > 0。
标签: sql vb.net ado.net ms-access-2010 oledb