我有像这样的vb:
Sub inputdata()
Try
koneksi.Open()
***sql2 = "SELECT code_cust from customer where ('nama_cust= " & Me.cbcust.Text & "')"
cmd = New MySqlCommand(sql2, koneksi)
sql3.text=cmd.ExecuteNonQuery()***
sql = "insert into hsmaster(nohs,detailhs,beamasuk,satuanhs,idcust,asal) values ('" & Me.txtnohs.Text & "',"
sql += "'" & Me.rtdetail.Text & " ',"
sql += "'" & Me.txtbm.Text & " ',"
sql += "'" & Me.txtsatuan.Text & " ',"
sql += "'" & sql3 & " ',"
sql += "'" & Me.Cbcountry.Text & " ')"
cmd = New MySqlCommand(sql, koneksi)
cmd.ExecuteNonQuery()
MessageBox.Show("Insert data berhasil dilakukan")
Catch ex As Exception
MessageBox.Show("Insert data Gagal dilakukan")
Finally
koneksi.Close()
End Try
所以我想将quert sql3的结果保存到slq3,但结果是-1 请推荐...
sql2是对客户表的查询,客户的子句名称是从组合框客户加载的。 cbcust.text来自组合框,从表客户加载数据。
感谢任何帮助和消化。
答案 0 :(得分:0)
ExecuteNonQuery仅用于插入/更新/删除,您不希望从中检索数据的查询。您看到的-1是执行非查询时返回的数据库,以指示命令是否成功。在第二次插入时使用ExecuteNonQuery是正确的,但是对于第一个选择查询,如果要返回一个值,则必须使用
sql3.text = cmd.ExecuteScalar
或使用datareader
Dim dr As MySqlDataReader
dr = cmd.ExecuteReader
'check to make sure dr isnot nothing and read it, then
Dim returnValue as string = dr(code_cust)
ExecuteScalar用于返回单个值,在您的情况下可能效果最佳,在期望多列和/或行时使用datareader
您也应该在查询中使用参数,但如果使用像你这样的引号:
***sql2 = "SELECT code_cust from customer where ('nama_cust= " & Me.cbcust.Text & "')"
需要像这样移动的单引号:
***sql2 = "SELECT code_cust from customer where (nama_cust= '" & Me.cbcust.Text & "')"
因为现在,这是一个语法错误