在VB Net中使用Microsoft Access数据库的多个If条件

时间:2016-09-06 08:48:11

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

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

以下是我的代码:

Dim conn As New 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”类型的转换无效。

任何助手?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您的ToString用法会将accnotxtnametxt文本框的值转换为文本字符串,并且您尝试将其与True进行比较(即{ {1}})accnotxt.ToString = True数据类型而不是Boolean数据类型,即您尝试将文本与布尔值(true或false)进行比较。

执行帐号和名称检查的一个非常基本的方法(可以改进)是将String语句更改为:

SELECT

我从Dim deposit As OleDbCommand = New OleDbCommand("SELECT * FROM [Current_Account] WHERE [AccountNo] and [CustomerName] = '" & accnotxt.Text & "' AND [CustomerName] = '" & nametxt.Text & "'", myConnection) 子句中删除了Amount过滤器,因为我不确定您为什么要这样做。您甚至不使用此WHERE数据库命令。然后执行deposit SQL命令并获得其结果:depositExecuteScalar执行以下操作:

  

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

然后,您将帐号和姓名检查更改为Dim result = deposit.ExecuteScalar(),而不是检查文本框的值是否为特定帐号和名称。

换句话说,如果您的查询返回某些内容而不是没有,那么您可以假设当前帐户存在If result IsNot Nothing Then和{{1} }。

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

答案 1 :(得分:1)

除了@Jonathon Ogden的回答:

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

$("#pause").click(function() {
   clearInterval(count()); 
})

将其更改为:

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