所以我将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',因为其结果集包含多个匿名列。
有关于此的任何想法吗?
答案 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
精彩的文章,非常清楚地概述了我想要做的事情。