【问题标题】:Multiple If condition using Microsoft Access database in VB Net在 VB Net 中使用 Microsoft Access 数据库的多个 If 条件
【发布时间】:2016-09-06 08:48:11
【问题描述】:

我正在尝试建立一个银行系统,其中客户只有在使用 VB NET 中的 Microsoft Access 数据库输入正确的 AccountNo 和名称时才能存款。

这是我的代码:

Dim conn 作为新的 OleDbConnection

Dim conn = "provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\Database\Bank-Application-Database.accdb;"

    conn.ConnectionString = "provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\Database\Bank-Application-Database.accdb;"

    cmdupdate.Connection = cnnOLEDB

    Dim deposit As OleDbCommand = New OleDbCommand("SELECT * FROM [Current_Account] WHERE [AccountNo] and [CustomerName] = '" & accnotxt.Text & "' AND [CustomerName] = '" & nametxt.Text & "' AND [Amount] = '" & amounttxt.Text & "'", myConnection)
    deposit.Connection = conn
    conn.Open()


    If accnotxt.ToString = True And nametxt.ToString = True Then

        cmdupdate.CommandText = "UPDATE [Current_Account] SET [Amount] = '" & amounttxt.Text.ToString & " WHERE [AccountNo] AND [CustomerName] = " & accnotxt.Text.ToString & " " & nametxt.ToString & ";"
        cmdupdate.CommandType = CommandType.Text
        cmdupdate.ExecuteNonQuery()
        MsgBox(" Successfully deposited.")
    Else
        MsgBox("Incorrect Account Number or Name.")

我可以运行。但是当我点击存款时,这是错误的。

我得到的错误:

Microsoft.VisualBasic.dll 中出现“System.InvalidCastException”类型的未处理异常

附加信息:从字符串“System.Windows.Forms.TextBox, Te”到类型“Boolean”的转换无效。

有帮手吗?提前致谢。

【问题讨论】:

    标签: database vb.net ms-access if-statement


    【解决方案1】:

    除了@Jonathon Ogden 的回答:

    您在此查询中错过了单引号:

    cmdupdate.CommandText = "UPDATE [Current_Account] SET [Amount] = '" & amounttxt.Text.ToString & " WHERE [AccountNo] AND [CustomerName] = " & accnotxt.Text.ToString & " " & nametxt.ToString & ";"
    

    改成这样:

    cmdupdate.CommandText = "UPDATE [Current_Account] SET [Amount] = " & Val(amounttxt.Text) & " WHERE [AccountNo]= '" & accnotxt.Text & "' AND [CustomerName] = '" & nametxt.Text & "';"
    

    我还从amounttxt.Text.ToString 中删除了单引号,假设它是一个值,将其更改为Val(amounttxt.Text),这样即使该文本框为空白,也不会导致错误。

    还更正了您的WHERE 条件:

    另一个是您不再需要.ToString,因为.Text 属性已经是String

    【讨论】:

      【解决方案2】:

      您的ToString 使用会将accnotxtnametxt 文本框的值转换为文本字符串,并且您尝试将其与True(即accnotxt.ToString = True)进行比较,后者是@ 987654327@ 数据类型不是String 数据类型,即您正在尝试将文本与布尔值(真或假)进行比较。

      进行帐号和姓名检查的一种非常基本的方法(可以改进)是将您的 SELECT 语句更改为:

      Dim deposit As OleDbCommand = New OleDbCommand("SELECT * FROM [Current_Account] WHERE [AccountNo] and [CustomerName] = '" & accnotxt.Text & "' AND [CustomerName] = '" & nametxt.Text & "'", myConnection)
      

      我从WHERE 子句中删除了Amount 过滤器,因为我不确定您为什么要这样做。你甚至不使用这个deposit 数据库命令。然后执行deposit SQL 命令并获得其结果:Dim result = deposit.ExecuteScalar()ExecuteScalar 执行以下操作:

      执行查询,返回查询返回的结果集中第一行的第一列。

      然后您将您的帐号和名称检查更改为If result IsNot Nothing Then,而不是检查文本框的值是否是特定的帐号和名称。

      换句话说,如果您的查询返回 something 而不是 nothing,那么您可以假设当前帐户存在 accnotxtnametxt。 p>

      另外,请注意@CrushSundae 的回答,因为他们也强调了其他问题。

      【讨论】:

      • 我该怎么做?对不起这里的菜鸟。
      • 为你编辑了我的答案。
      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多