从inputbox

时间:2016-03-21 22:47:39

标签: sql database vb.net

我有一个按钮,一旦点击,你需要输入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)

1 个答案:

答案 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 *查询返回的顺序(当然,如果你更改列名,你有相同的问题,但至少,你应该知道更改)