0

因此,我将 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”,因为其结果集包含多个匿名列。

有什么想法吗?

4

3 回答 3

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];
于 2012-08-20T09:53:42.623 回答
1

您可以使用SqlDataReader's 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
        }
    }    
}
于 2012-08-20T10:26:56.027 回答
0

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

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

于 2012-08-23T08:07:24.380 回答