第一に、羊毛の主題のタイトルについてお詫びします。これを言葉にするのは難しいです。
それで…それを念頭に置いて、データベース関係図(以下を参照)を添付しました。これにより、より簡潔に説明できるようになります。
私たちは大規模なデータベースを継承しました(したがって、データベースを変更/合理化する機能はありません。残念ですが)。このデータベースには、多対多の関係がいくつかある4つのテーブルの厄介な「ループ」があります。
裁判所の名前、完全な住所、および一般的なメモを取得できる必要があります。これらはすべて、すべての裁判所に1つしかなく、その後に連絡先の詳細が2つのグループ(一般的な連絡先と特定の連絡先)に分けられます。裁判所に依存する1つ以上のリストが含まれています。以下の形式で表示するには、これが必要です。
アバーガベニー治安判事裁判所
アバーガベニー
NP75DL
この裁判所は公聴会のみに開かれています。追加の裁判所のメモ…。
連絡先
交換機:01633 64xxxx
ファックス:01633 64xxxx
サービス1:01633 64xxxx
サービス2:0163364xxxx
連絡先名1-裁判所長代理:0163364xxxx
連絡先名2-事務局長代理:0163364xxxx
連絡先名3-代理リスト役員:0163364xxxx
連絡先名前4-裁判官の書記官:01633 64xxxx
昨日StackOverflowに投稿して、1つの多対多の関係に対してSQLクエリとASP.NET C#コードを正しく記述する方法を調べました。簡単にするために、私が提供した情報は非常に言い換えられており、基本的に上記のループの半分しか含まれていませんでした。しかし、それ以来、同じ原則を完全なループに適用する試みに失敗しました。
SQLクエリ(ループの前半で機能します。つまり、裁判所の住所の詳細と特定の連絡先のリストを提供します)は次のようになります。
string myQuery =
"SELECT C.court_id, court_name, court_addr1, court_town_name, court_county_name, " +
"court_country_name, court_addr_pcode, court_addr_dx, court_code, court_note, " +
"court_contacts_name, court_contacts_no, CCT.court_contact_type_desc " +
"FROM court C " +
"JOIN court_addr CA ON C.court_addr_id = CA.court_addr_id " +
"JOIN court_town CT ON CA.court_town_id = CT.court_town_id " +
"JOIN court_county CC ON CT.court_county_id = CC.court_county_id " +
"JOIN court_country CCO ON CC.court_country_id = CCO.court_country_id " +
"JOIN court_contacts CCON ON C.court_id = CCON.court_id " +
"JOIN court_contact_type CCT ON CCON.court_contact_type_id = CCT.court_contact_type_id " +
"WHERE C.court_id = '25' " +
"ORDER BY C.court_id";
C#は次のようになりますが、次のようになります。
if (myDataReader.HasRows)
{
string last_id = string.Empty;
while (myDataReader.Read())
{
string court_id = myDataReader["court_id"].ToString();
string court_name = myDataReader["court_name"].ToString();
string court_addr = myDataReader["court_addr1"].ToString();
string court_town = myDataReader["court_town_name"].ToString();
string court_county = myDataReader["court_county_name"].ToString();
string court_country = myDataReader["court_country_name"].ToString();
string court_pcode = myDataReader["court_addr_pcode"].ToString();
string court_dx = myDataReader["court_addr_dx"].ToString();
string court_code = myDataReader["court_code"].ToString();
string court_note = myDataReader["court_note"].ToString();
string court_contact_name = myDataReader["court_contacts_name"].ToString();
string court_contact_desc = myDataReader["court_contact_type_desc"].ToString();
string court_contact_no = myDataReader["court_contacts_no"].ToString();
if (last_id != court_id) {
Response.Write("<strong>" + court_name + "</strong><br>" + court_addr +
"<br>" + court_town + "<br>" + court_county + "<br>" +
court_country + "<br>" + court_pcode + "<br><br>" +
court_dx + "<br><p>Court code " + court_code + "</p><p>" +
court_note + "</p>" + court_contact_name + " - " +
court_contact_desc + ": " + court_contact_no + "<br>");
} else {
Response.Write("<br>" + court_contact_name + " - " + court_contact_desc +
": " + court_contact_no + "<br>");
}
last_id = court_id;
}
}
SQLクエリの同じロジックに従って、court_contacts_general_noの追加のSELECTパラメーターとcourt_contacts_generalテーブルを取り込むためのいくつかの追加のJOIN行を追加しようとしましたが(以下を参照)、これにより'相関の行に沿ってエラーが発生します。名前CCGはFROM句で複数回指定されているか、2番目の相関名が削除されると完全に空白になります。
"JOIN court_contacts_general CCG ON C.court_id = CCG.court_id " +
"JOIN court_contacts_general CCG ON CCT.court_contact_type_id = CCG.court_contact_type_id " +
C#で、court_contact_general_noの新しい文字列を追加し、この新しい変数から受け取った応答の書き込みに基づいて、別のif/elseループを作成しようとしました。
いずれにせよ、私が得ているのは、大きな空白のページまたは上記のSQL関連のエラーだけです。
何か案は?
すべて/すべての助けを事前に感謝します。