vb.net - 从字符串“ual”到类型“Double”的转换无效
问题描述
在这一行得到错误
别的
Hitung = Microsoft.VisualBasic.Right(Rd.GetString(0), 3) + 1
解决方案
您使用的是什么数据库,而不是它自己的提供程序?
我会假设标签一开始是空的,所以不需要设置.Text
为""
.
Call
不再需要该关键字。
去掉 and 的方法和Koneksi
声明。数据库对象应该在使用它们的方法中创建和处理。即使出现错误,该语言也提供了为我们处理此问题的块。Cmd
Rd
Using...End Using
连接打开时不要更新用户界面(填写组合框、标签等)。如果您使用 a DataTable
,阅读器(需要打开的连接)可以填充它并且可以关闭连接。
不要连接字符串来构建 sql 语句。始终使用参数。见
ComboBox1.SelectedIndexChanged
事件。
最后,在最后一种方法中,我在方法中看到了您的问题NomorOtomatic
。Option Strict 会帮助你。看我的评论。
Hitung = Microsoft.VisualBasic.Right(Rd.GetString(0), 3) + 1
旧的 vb6Right
方法返回一个String
. 您不能将一个添加到字符串。编译器正在尝试转换Right(Rd.GetString(0), 3)
为 aDouble
以便它可以执行加法。显然,返回的是"ual"
不能转换为数字的。
我已经用Right
.net方法替换了该Substring
方法。请参阅https://docs.microsoft.com/en-us/dotnet/api/system.string.substring?view=net-5.0
我添加了一个.TryParse
来检查是否有一个有效的数字,如果解析失败则优雅地退出。
Private ConStr As String = "Your connection string"
Dim tgljualMySQL As String
Sub kondisiawal()
lbltanggal.Text = Today
lbladmin.Text = FormMenuUtama.STLabel4.Text
TextBox3.Enabled = False
Label12.Text = "0"
munculkodepelanggan()
NomorOtomatis()
BuatKolom()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
lbljam.Text = TimeOfDay.ToString
End Sub
Private Sub Formtransjual_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
kondisiawal()
End Sub
Sub munculkodepelanggan()
Dim dt As New DataTable
Using Conn As New OdbcConnection(ConStr),
Cmd As New OdbcCommand("select * from tbl_pelanggan", Conn)
Conn.Open()
Using Rd = Cmd.ExecuteReader
dt.Load(Rd)
End Using
End Using
For Each row As DataRow In dt.Rows
ComboBox1.Items.Add(row(0))
Next
End Sub
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim dt As New DataTable
Using Conn As New OdbcConnection(ConStr),
Cmd As New OdbcCommand("select * from tbl_pelanggan where kodepelanggan = ?;", Conn)
Cmd.Parameters.Add("@ComboText", OdbcType.NVarChar, 50).Value = ComboBox1.Text
Conn.Open()
Using Rd = Cmd.ExecuteReader
dt.Load(Rd)
End Using
End Using
If dt.Rows.Count > 0 Then
lblnamaplg.Text = dt(0)("namapelanggan")
lblalamat.Text = dt(0)("alamatpelanggan")
lbltelepon.Text = dt(0)("telppelanggan")
End If
End Sub
Sub NomorOtomatis()
Dim dt As New DataTable
Using Conn As New OdbcConnection(ConStr),
Cmd = New OdbcCommand("Select * from tbl_jual where nojual in(select max(nojual) from tbl_jual)", Conn)
Conn.Open()
Using Rd = Cmd.ExecuteReader
dt.Load(Rd)
End Using
End Using
If dt.Rows.Count > 0 Then
Dim StrHitung = dt(0)(0).ToString
Dim Hitung As Integer
If Not Integer.TryParse(StrHitung.Substring(StrHitung.Length - 3), Hitung) Then
MessageBox.Show($"Database returned {StrHitung}. The right 3 characters cannot be converted to a number")
Exit Sub
End If
TextBox1.Text = "ADM" & (Hitung + 1)
Else
TextBox1.Text = "ADM001"
End If
End Sub
顺便说一句,当你的数字超过 999 时,你会怎么做?
推荐阅读
- python - 在 Python 中迭代行
- git - Git 拉取请求和变基
- c# - 使用 HTTPClient 发送带有重试的 POST 请求
- r - 数据表评估的转变
- php - 我可以阻止使用 SQL Server 处理 XML 数据吗 - PHP
- c# - 调用链中的异步等待分配
- android - 权限拒绝:打开提供程序 com.miui.gallery.provider.GalleryOpenProvider
- node.js - 使用 Chai 期望 throw 不会捕获 Promise 拒绝
- json - 如何在 YosysJS 中使用“write_json”命令
- docker - Python 3.5 搜索 libpython3.6m.so.1.0