我正在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
答案 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("'", "''") & "'"