0

したがって、ClientID を DB に渡し、それを使用してすべての詳細を検索します。次に、それらの詳細を使用して、詳細と密接に一致する他のすべてのユーザーも取得したいと考えています。私はこれをすべて書いていますが、私の問題は、最初のユーザーの詳細も返したいということです。例えば;

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で2つの選択を使用しているだけで、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の 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 に答える