从vb.net表单中搜索数据库中的人员

时间:2011-07-13 11:52:19

标签: vb.net

我正在VB.net中构建一个应用程序并尝试从我在文本框中写的de person名称中获取数据库中的详细信息,我有以下代码(我得到一个eeror,找不到列“我在文本框中给出的名字“)。有人可以帮助我吗?

表单加载中的

    mijnKlant.KlantVullen()
    dgvKlanten.DataSource = mijnKlant.p_klant
    With Me.dgvKlanten
        .Columns("klant_id").DisplayIndex = 0
        .Columns("klant_id").HeaderText = "Klantnummer"
        .Columns("naam").DisplayIndex = 1
        .Columns("naam").HeaderText = "Naam"
        .Columns("voornaam").DisplayIndex = 2
        .Columns("voornaam").HeaderText = "Voornaam"
        .Columns("straat_nr").DisplayIndex = 3
        .Columns("straat_nr").HeaderText = "Straat en Nr."
        .Columns("postcode").DisplayIndex = 4
        .Columns("postcode").HeaderText = "Postcode"
        .Columns("naam_gemeente").DisplayIndex = 5
        .Columns("naam_gemeente").HeaderText = "Gemeente"
        .Columns("landen_naam").DisplayIndex = 6
        .Columns("landen_naam").HeaderText = "Land"
        .Columns("code_afwijkend_postadres").DisplayIndex = 7
        .Columns("code_afwijkend_postadres").HeaderText = "Postadres"
        .Columns("facturatieadres_straat_nr").DisplayIndex = 8
        .Columns("facturatieadres_straat_nr").HeaderText = "Facturatie Straat en Nr."
        .Columns("facturatieadres_postcode").DisplayIndex = 9
        .Columns("facturatieadres_postcode").HeaderText = "Facturatie Postcode"
        .Columns("facturatieadres_gemeente").DisplayIndex = 10
        .Columns("facturatieadres_gemeente").HeaderText = "Facturatie Gemeente"
        .Columns("facturatieadres_land").DisplayIndex = 11
        .Columns("facturatieadres_land").HeaderText = "Facturatie Land"
        .Columns("identiteitskaart_code").DisplayIndex = 12
        .Columns("identiteitskaart_code").HeaderText = "Identiteitskaartnummer"
        .Columns("postcode_id").Visible = False
        .Columns("land_id").Visible = False
        .Columns("land_id1").Visible = False
        .Columns("postcode_id1").Visible = False
        .Columns("postcode_gemeente").Visible = False

        .RowHeadersVisible = True
        .AutoSizeColumnsMode = DataGridViewAutoSizeColumnMode.Fill
        .AllowUserToOrderColumns = False
        .AllowUserToResizeColumns = False
        .AllowUserToResizeRows = False
        .SelectionMode = DataGridViewSelectionMode.FullRowSelect

    End With
表示层

    'enablen van buttons zodat de functie gebruikt kan worden
    Me.btnVerwijderKlant.Enabled = True
    Me.btnWijzigKlant.Enabled = True


    Dim strNaam As String
    strNaam = Me.txtNaam.Text 'geeft de naam in de databank

    'If outindex = -1 Then Exit Sub

    Dim myrw As DataRowView

    'functie aanroepen op DAL
    myrw = mijnKlant.klant_detail(strNaam)

    'binden van opgehaalde details aan de toegewezen controls
    Me.txtNaam.DataBindings.Add("Text", myrw, "naam")
    Me.txtNaam.DataBindings.Clear()
    Me.txtVoornaam.DataBindings.Add("Text", myrw, "voornaam")
    Me.txtVoornaam.DataBindings.Clear()
    Me.txtStraat.DataBindings.Add("Text", myrw, "straat_nr")
    Me.txtStraat.DataBindings.Clear()
    Me.cboGemeente.DataBindings.Add("Text", myrw, "naam_gemeente")
    Me.cboGemeente.DataBindings.Clear()
    Me.cbxAfwijkenAdres.DataBindings.Add("text", myrw, "code_afwijkend_postadres")

    'omzetting van string naar boolean
    If cbxAfwijkenAdres.Text = "T" Then
        Me.cbxAfwijkenAdres.Checked = True
        Me.cbxAfwijkenAdres.Text = "Postadres is gelijk aan het facturatieadres"
    End If

    If cbxAfwijkenAdres.Text = "F" Then
        Me.cbxAfwijkenAdres.Checked = False
        Me.cbxAfwijkenAdres.Text = "Postadres is gelijk aan het facturatieadres"
    End If

    'binden van opgehaalde details aan de toegewezen controls
    Me.cbxAfwijkenAdres.DataBindings.Clear()
    Me.txtPost.DataBindings.Add("Text", myrw, "postcode")
    Me.txtPost.DataBindings.Clear()
    Me.cboLand.DataBindings.Add("Text", myrw, "landen_naam")
    Me.cboLand.DataBindings.Clear()
    Me.txtID_Nr.DataBindings.Add("Text", myrw, "identiteitskaart_code")
    Me.txtID_Nr.DataBindings.Clear()
    Me.txt_F_Straat.DataBindings.Add("Text", myrw, "facturatieadres_straat_nr")
    Me.txt_F_Straat.DataBindings.Clear()
    Me.cbo_F_Gemeente.DataBindings.Add("Text", myrw, "facturatieadres_gemeente")
    Me.cbo_F_Gemeente.DataBindings.Clear()
    Me.cbo_F_Land.DataBindings.Add("Text", myrw, "facturatieadres_land")
    Me.cbo_F_Land.DataBindings.Clear()
    Me.txt_F_Post.DataBindings.Add("Text", myrw, "facturatieadres_postcode")
    Me.txt_F_Post.DataBindings.Clear()

    dgvKlanten.DataSource = mijnKlant.p_klant

    myrw = Nothing
End Sub
我的数据层

Public Sub KlantVullen()         'methode om dataview op te bouwen die dan later als bron zal dienen voor de zoekcombo in ons         Dim sqlStr As String =“SprKlantzoeken”         Dim objConn As New SqlConnection(conStr.ConnString)         objConn.Open()

    Dim adapter As New SqlDataAdapter(sqlStr, objConn)

    'opvangen van foutmelding bij het ledigen van tabel klanten in dataset
    Try
        ds.Tables.Remove("klanten")

    Catch ex As ArgumentException

    End Try
    adapter.Fill(ds, "klanten")

    dt_klanten = ds.Tables("klanten")
    dv_klanten = dt_klanten.DefaultView
    dv_klanten.Sort = "klant_id"

    adapter.Dispose()
    adapter = Nothing

    objConn.Close()
    objConn.Dispose()

End Sub
' functie voor details op te vragen van klanten
Public Function klant_detail(ByVal i_index As String) As DataRowView
    Dim dv As DataView
    Dim anyrow As DataRowView
    dv = New DataView

    With dv
        .Table = ds.Tables("klanten")
        .AllowDelete = True
        .AllowEdit = True
        .AllowNew = True
        .RowFilter = "naam = " & i_index
    End With

    anyrow = dv.Item(0) 'geeft de eerste rij van de dataview dv

    ' Simple bind to a TextBox control
    dv = dt_klanten.DefaultView
    Return anyrow
    dv.Dispose()
    dv = Nothing

End Function

SQL数据库中的存储过程:

USE [parken3] 走 / * 对象:StoredProcedure [dbo]。[SprKlantzoeken]脚本日期:07/13/2011 13:45:07 < / EM> * / SET ANSI_NULLS ON 走 SET QUOTED_IDENTIFIER ON GO

ALTER PROCEDURE [dbo]。[SprKlantzoeken] 如 开始      - 添加SET NOCOUNT ON以防止出现额外的结果集      - 干扰SELECT语句。     SET NOCOUNT ON;

-- Insert statements for procedure here

从landen_lijst中选择*,klant k,邮政编码p 其中k.postcode_id = p.postcode_id 和k.land_id = l.land_id

END

1 个答案:

答案 0 :(得分:0)

您需要更改设置的行.Rowfilter

With dv
    .Table = ds.Tables("klanten")
    .AllowDelete = True
    .AllowEdit = True
    .AllowNew = True
    .RowFilter = "naam = " & i_index      <---------
End With

将其更改为:

.RowFilter = "naam = '" & i_index.Replace("'", "''") & "'"