【问题标题】:searching persons in a database from vb.net form从 vb.net 表单中搜索数据库中的人员
【发布时间】:2011-07-13 11:52:18
【问题描述】:

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

在表单的加载中:

    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

在我的数据层上:

公共子 KlantVullen() ' methode om dataview op te bouwen die dan later als bron zal dienen voor de zoekcombo in ons Dim sqlStr As String = "SprKlantzoeken" 将 objConn 调暗为新的 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 数据库中的存储过程:

使用 [parken3] 走 /* 对象:StoredProcedure [dbo].[SprKlantzoeken] 脚本日期:07/13/2011 13:45:07 */ 设置 ANSI_NULLS ON 走 设置 QUOTED_IDENTIFIER ON 去吧

改变程序 [dbo].[SprKlantzoeken] 作为 开始 -- 添加了 SET NOCOUNT ON 以防止额外的结果集 -- 干扰 SELECT 语句。 设置无计数;

-- Insert statements for procedure here

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

结束

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    您需要更改设置 .Rowfilter 的行

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

    改成这样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-20
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 2012-09-04
      相关资源
      最近更新 更多