返回两个数据集

时间:2012-08-20 09:04:31

标签: asp.net sql-server vb.net ado.net

所以我将ClientID传递给我的数据库并使用它来查找所有细节,然后我想使用这些细节也让所有其他用户与细节紧密匹配。我写了所有这些,但我的问题是我想要返回初始用户的详细信息。例如;

Select Details = @UserDetails
from UnregisteredUserTable
where UserId = @UserID

Select BunchOfUsersWithMatchingData
from RegisteredUserTable
where UserDetails like @UserDetails

显然我删除了不必要的信息。但正如您所看到的,这将返回匹配用户的所有数据,但不返回初始用户的详细信息。我可以用某种方式使用CTE吗?

更新

道歉,不知道我的数据访问是否重要。我正在做以下几个atm,但可以改变它没问题。

Dim results = thisObjectContext.MatcherSP(UserID)

For Each obj In results  
    TableData.Rows.Add(obj.IdNumber, obj.name, 
    obj.emailaddress1, obj.telephone1, obj.telephone2, obj.address1_line1, 
    obj.address1_line2)
Next

更新2

好吧所以我只是在我的SP中使用两个选项,它在SQL Server中运行良好。但是当我尝试在Visual Studio中将它添加到我的dbml时,我得到一个奇怪的错误:

  

无法提取存储过程'dbo.MySP',因为其结果集包含多个匿名列。

有关于此的任何想法吗?

3 个答案:

答案 0 :(得分:1)

嗯,这不是VB代码,但我会尽可能简单。

使用SqlDataAdapter填充数据集。两个select语句的结果都将填充DataSet中的不同表。

cmd.CommandText = "MatcherSP";
cmd.CommandType = CommandType.StoredProcedure;

adapter = new SqlDataAdapter(cmd);
ds = new DataSet();
adapter.Fill(ds);

然后您可以按如下方式访问数据:

tableA = ds.Tables[0];
tableB = ds.Tables[1];

答案 1 :(得分:1)

您可以使用SqlDataReader的nextresult()方法。

using(SqlCommand cmd = new SqlCommand("NameOfSP",c))
{
    cmd.CommandType = CommandType.StoredProcedure;
    using(SqlDataReader d = cmd.ExecuteReader())
    {
        while(d.Read()){
             //Result data from the first select
        }
        d.NextResult();

        while(d.Read()){
             //Result data from the second select
        }
    }    
}

答案 2 :(得分:0)

http://twogeeks.mindchronicles.com.dnpserver.com/?p=28&cpage=1#comment-37818

精彩的文章,非常清楚地概述了我想要做的事情。