我正在尝试建立一个银行系统,客户只有在进入正确的账户时才能存款。在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”类型的转换无效。
任何助手?提前谢谢。
答案 0 :(得分:1)
您的ToString
用法会将accnotxt
和nametxt
文本框的值转换为文本字符串,并且您尝试将其与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命令并获得其结果:deposit
。 ExecuteScalar执行以下操作:
执行查询,并返回查询返回的结果集中第一行的第一列。
然后,您将帐号和姓名检查更改为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
。