VB.net从存储过程中的2个select语句访问数据

时间:2015-08-05 07:17:19

标签: sql-server vb.net

我正在尝试从vb.net中的2 select语句访问结果,但我只能访问第一个select语句中的数据。

CREATE PROCEDURE [dbo].[pr_testproc] 
AS    
BEGIN    
    SET NOCOUNT ON;   

    SELECT 
        comp_name, p_center, branch_id
    FROM 
        tbl_company B 
    INNER JOIN
        tbl_b_office X ON X.batch_id = B.tran_id
    WHERE
        X.office_stat = 1
    ORDER BY 
        comp_name ASC;

    SELECT 
        xcomp_name, xp_center, xbranch_id
    FROM
        tbl_company B 
    INNER JOIN 
        tbl_b_office X ON X.batch_id = B.tran_id
    WHERE
        X.office_stat = 0
        AND MONTH(X.post_dt) = MONTH(GETDATE())
        AND YEAR(X.post_dt) = YEAR(GETDATE())
    ORDER BY
        comp_name ASC;   
END 

示例,如果我尝试获取第二个表中的数据结果

getData(intRow).xcomp_name

这会收到错误:

  

对象引用未设置为对象的实例。

但这会得到数据

getData(intRow).comp_name

将获得该字段的值。

2 个答案:

答案 0 :(得分:2)

将输出数据收集到Dataset,以便您可以从数据集第0个索引中的select query获取第一个DataTable的结果。

今年5月可以帮助你:

Dim myDataSet=GetDataSetFromSP("yourSPName")
Dim FirstResult As DataTable=myDataSet.Tables(0) 
Dim SecontResult As DataTable=myDataSet.Tables(1) 

在这里,您必须编写将执行SP的函数并返回DataSet

答案 1 :(得分:0)

您还可以将2个查询合并为一个。

CREATE PROCEDURE [dbo].[pr_testproc] 
AS    
BEGIN    
    SET NOCOUNT ON;   

    SELECT 
        comp_name, p_center, branch_id, xcomp_name, xp_center, xbranch_id
    FROM 
        tbl_company B 
    INNER JOIN
        tbl_b_office X ON X.batch_id = B.tran_id
    WHERE
        X.office_stat = 1 
        OR
        (
         X.office_stat = 0
         AND MONTH(X.post_dt) = MONTH(GETDATE())
         AND YEAR(X.post_dt) = YEAR(GETDATE())
        )
    ORDER BY 
        comp_name ASC;
END 

然后在代码中,检查office_stat的值并继续相应。