SQL Server SELECT存储过程根据combobox.selectedvalue

时间:2010-04-12 01:55:44

标签: sql vb.net ado.net

为了根据组合框的选定值填充数据网格视图,我尝试创建存储过程。但是,因为我不是100%确定我正在做什么,取决于我的存储过程结束时的WHERE语句,它要么返回表中的所有内容,要么根本不返回任何内容。

这就是我班上的内容:

Public Function GetAankoopDetails(ByRef DisplayMember As String, ByRef ValueMember As String) As DataTable

    DisplayMember = "AankoopDetailsID"
    ValueMember = "AankoopDetailsID"

    If DS.Tables.Count > 0 Then
        DS.Tables.Remove(DT)
    End If

    DT = DAC.ExecuteDataTable(My.Resources.S_AankoopDetails, _Result, _
                              DAC.Parameter(Const_AankoopID, AankoopID), _
                              DAC.Parameter("@ReturnValue", 0))

    DS.Tables.Add(DT)

    Return DT
End Function

Public Function GetAankoopDetails() As DataTable

    If DS.Tables.Count > 0 Then
        DS.Tables.Remove(DT)
    End If

    DT = DAC.ExecuteDataTable(My.Resources.S_AankoopDetails, _Result, _
                              DAC.Parameter(Const_AankoopID, AankoopID), _
                              DAC.Parameter("@ReturnValue", 0))

    DS.Tables.Add(DT)
    Return DT
End Function

这是我编写的表单后面的代码中的函数,用于填充datagridview:

  Private Sub GridAankoopDetails_Fill()
    Try
        Me.Cursor = Cursors.WaitCursor
        dgvAankoopDetails.DataSource = Nothing
        _clsAankoopDetails.AankoopDetailsID = cboKeuze.SelectedValue
        dgvAankoopDetails.DataSource = _clsAankoopDetails.GetAankoopDetails



    Catch ex As Exception
        MessageBox.Show("An error occurred while trying to fill the data grid: " & ex.Message, "Oops!", MessageBoxButtons.OK)
    Finally
        Me.Cursor = Cursors.Default
    End Try
End Sub

最后,这是我的存储过程:(注意我不知道我在这里做什么)

USE [Budget]
GO
/****** Object:  StoredProcedure [dbo].[S_AankoopDetails]    Script Date: 04/12/2010 03:10:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[S_AankoopDetails]
(
 @AankoopID int

)
AS

SELECT     dbo.tblAankoopDetails.AankoopDetailsID, dbo.tblAankoopDetails.AankoopID, dbo.tblAankoopDetails.ArtikelID, dbo.tblAankoopDetails.Aantal, 
                      dbo.tblAankoopDetails.Prijs, dbo.tblAankoopDetails.Korting, dbo.tblAankoopDetails.SoortKorting, dbo.tblAankoopDetails.UitgavenDeelGroepID
FROM         dbo.tblAankoopDetails INNER JOIN
                      dbo.tblAankoop ON dbo.tblAankoopDetails.AankoopID = dbo.tblAankoop.AankoopID INNER JOIN
                      dbo.tblArtikel ON dbo.tblAankoopDetails.ArtikelID = dbo.tblArtikel.ArtikelID INNER JOIN
                      dbo.tblUitgavenDeelGroep ON dbo.tblAankoopDetails.UitgavenDeelGroepID = dbo.tblUitgavenDeelGroep.UitgavenDeelGroepID
WHERE dbo.tblAankoopDetails.Deleted = 0 and dbo.tblAankoopDetails.AankoopID = @AankoopID

ORDER BY AankoopID

有谁知道我需要做些什么来解决这个问题?我想这是存储过程的WHERE部分,但我需要一种方法将组合框的selectedvalue传递给@AankoopID参数。

非常感谢任何帮助。

亲切的问候 杰

2 个答案:

答案 0 :(得分:0)

包含的存储过程代码WHERE子句看起来没问题。您应该在ORDER子句中指定一个表:

ORDER by dbo.tblAankoopDetails.AankoopId

但这并不能解释为什么你得到全部或没有行。您可能希望查看表的实际内容,确保它已正确配置,NULL值不会使您绊倒等等。

答案 1 :(得分:0)

菲利普,大卫,

我通过更改GridAankoopDetails_Fill子中的一行来解决此问题

_clsAankoopDetails.AankoopDetailsID = cboKeuze.SelectedValue

_clsAankoopDetails.AankoopID = cboKeuze.SelectedValue

这是因为AankoopD参数传递而不是AankoopDetailsID。感谢您确认存储过程正常,缩小搜索问题的范围。

菲利普,谢谢你让我看看参数中传递的内容,最终导致解决问题。

数据网格现在根据组合框的选定值进行更新。

祝福,