我有一个按钮,一旦点击,你需要输入customersID,一旦从整行输入数据,然后加载到文本框的复选框等,但是当我这样做时,它会提示我自己的错误我创建说客户找不到,因为它无法找到某种ID?任何帮助表示赞赏!
在我看来 - 当它从ID所在的地方加载*(全部)时我认为它只是在该客户ID(我想要的)中加载来自该特定行的所有数据,所以我可以使用rows.items等加载我所需的信息?这是正确的还是?一般来说,我只需要帮助检索数据并将其放入我的文本框等。
代码:
Private Sub Client(ByVal ans As String)
If con.State = ConnectionState.Closed Then con.Open()
cmd = New OleDbCommand
cmd.Connection = con
cmd.CommandText = "Select * FROM tbl WHERE ID = ?"
cmd.Parameters.Add("?", OleDbType.VarChar).Value = ans
If cmd.ExecuteNonQuery() = 0 Then
MsgBox("Does not exist!", MsgBoxStyle.Critical, "Enter new ID!")
Else
MessageBox.Show("Now loaded.", "Search Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information)
If con.State = ConnectionState.Closed Then con.Open()
'create data adapters
sql = "Select * from tbl"
da = New OleDbDataAdapter(sql, con)
da.Fill(ds, "tbl")
RecCnt = ds.Tables("tbl").Rows.Count 'how many records in ds
'assign data to lables
TxtCI.Text = ds.Tables("tbl").Rows(0).Item(0)
con.Close()
End If
cmd.ExecuteNonQuery()
con.Close()
End Sub
来电者(搜寻按钮): 客户端(客户ID)
答案 0 :(得分:1)
使用SELECT语句,ExecuteNonQuery无法正常工作。返回值是受影响的行数,但SELECT语句不会更改,插入或删除任何行,因此它始终为零。
您应该使用ExecuteReader(这也消除了使用OleDbDataAdapter,DataTable / Dataset和long winded语句行从DataSet / Tables / Rows / Columns层次结构中检索值的需要
If con.State = ConnectionState.Closed Then con.Open()
cmd = New OleDbCommand
cmd.Connection = con
cmd.CommandText = "Select * FROM tblcustomer WHERE CustomerID = ?"
cmd.Parameters.Add("?", OleDbType.VarChar).Value = ans
Dim reader As OleDbDataReader = cmd.ExecuteReader()
if reader.Read() Then
TxtCI.Text = reader(0).ToString()
TxtName.Text = reader(1).ToString()
... and so on ...
Else
MsgBox("Customer Does not exist!", ....)
请注意,您可以使用列名称替换列索引(0,1,2 etc ...)(" CI"," Name" etc ...)。这有点好,因为它不依赖于SELECT *查询返回的顺序(当然,如果你更改列名,你有相同的问题,但至少,你应该知道更改)