【问题标题】:Retrieving record to a combo box in vb.net将记录检索到 vb.net 中的组合框
【发布时间】:2016-01-03 14:54:55
【问题描述】:

我有一个存储过程,我想将记录显示到combobox。但它说

此行的位置 0 处没有行。

cboSchoolYear.Text = (dt.Rows(0)("Schoolyear")) 

存储过程代码:

ALTER PROCEDURE [dbo].[uspLatestDateEnrolled]
    -- Add the parameters for the stored procedure here

@studID INT


AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT TOP 1 DateEnrolled as LatestDate,
    SchoolYear,Levels,Section,StudentID
    FROM StudentHistory
    WHERE studentID = @studID
    ORDER BY DateEnrolled DESC
END

vb.net代码

   cn.Open()
        Using cmd As New SqlClient.SqlCommand("uspLatestDateEnrolled", cn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add(New SqlParameter("@studID", frmView.dgv1.SelectedCells(0).Value))
            cboSchoolYear.Text = (dt.Rows(0)("Schoolyear"))
            cboGradeLevel.Text = (dt.Rows(1)("levels"))
            cboSection.Text = (dt.Rows(2)("Section"))
            dtpEnrollment.Text = (dt.Rows(3)("dateEnrolled"))
        End Using
        cn.Close()

【问题讨论】:

  • 添加参数后,您不会执行填充数据表的命令。除此之外 dt 在哪里声明?您需要在尝试使用它之前填写它......另外,您正在执行 top1 这意味着您将获得 0 或 1 行而不是 2、3 等等,但您正在尝试将文本设置为永远不会回来的记录。 ..

标签: sql-server vb.net sql-server-2008 combobox


【解决方案1】:

在做一些研究时,这段代码解决了我的问题。感谢 Codexer,给了我一些建议。

  Try
        cn.Open()
        cmd = New SqlCommand("uspLatestDateEnrolled", cn)
        cmd.Parameters.AddWithValue("@studID", frmView.dgv1.SelectedCells(0).Value)
        cmd.CommandType = CommandType.StoredProcedure
        da.SelectCommand = cmd
        da.Fill(dt)
        cboSchoolYear.Text = dt.Rows(0).Item("SchoolYear")
        cboGradeLevel.Text = dt.Rows(0).Item("levels")
        cboSection.Text = dt.Rows(0).Item("Section")
        dtpEnrollment.Text = dt.Rows(0).Item("DateEnrolled")

    Catch x As Exception
        MessageBox.Show(x.GetBaseException().ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.[Error])
    Finally
        cmd.Dispose()
        cn.Close()
    End Try

【讨论】:

    【解决方案2】:

    您这里有几处错误(或几处错误并且帖子中缺少几处)

    1. 你永远不会声明 DT
    2. 如果您返回的结果不止一个,则您正在跳行(您不会因为 sql 中的前 1 个结果而从不同的记录中获取信息)
    3. 您不检查是否从数据库返回任何内容

    您的 vb.net 代码应如下所示(此代码并不完美,但它应该让您朝着正确的方向前进)

        cn.Open()
        Using cmd As New SqlClient.SqlCommand("uspLatestDateEnrolled", cn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add(New SqlParameter("@studID", frmView.dgv1.SelectedCells(0).Value))
    
        Dim SQLDataReader as SQLDataReader = cmd.executeReader()
    
        if sqldatareader.hasrows = true then 
        while sqldatareader.read
    
            if sqldatareader("Schoolyear") isnot dbnull.value then 
                    cboSchoolYear.Text = sqldatareader("Schoolyear")
            else
                    cboSchoolYear.Text = "Null"
            end if
            if sqldatareader("levels") isnot dbnull.value then 
                    cboGradeLevel.Text = sqldatareader("levels")
            else
                    cboGradeLevel.Text = "Null"
            end if
            if sqldatareader("Section") isnot dbnull.value then 
                    cboSection.Text = sqldatareader("Section")
            else
                    cboSection.Text = "Null"
            end if
            if sqldatareader("dateEnrolled") isnot dbnull.value then 
                    cboSection.Text = sqldatareader("dateEnrolled")
            else
                    cboSection.Text = "Null"
            end if
    
        loop
        else
           'No Results
        end if 
    
        End Using
        cn.Close() 
    

    【讨论】:

    • 如果这回答了您的问题,请不要将其标记为答案
    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多