C# 在一个';循环';
首先,我为这个主题含糊不清的标题道歉,很难用语言表达出来 所以…考虑到这一点,我附上了一个数据库关系图(见下文),希望能更简洁地解释它 我们继承了一个大型数据库(因此没有能力对其进行更改/合理化,更遗憾的是!),它有一个由4个表组成的麻烦的“循环”,其中有几个不同的多对多关系 我需要能够获得法院的名称、完整地址和一般说明,所有这些都只有一个法院,然后是联系方式,分为两组(一般和特定联系点),其中可能包含一个或多个列表,取决于法院。我需要它以以下格式显示: 阿伯加文尼地方法院C# 在一个';循环';,c#,asp.net,sql-server,C#,Asp.net,Sql Server,首先,我为这个主题含糊不清的标题道歉,很难用语言表达出来 所以…考虑到这一点,我附上了一个数据库关系图(见下文),希望能更简洁地解释它 我们继承了一个大型数据库(因此没有能力对其进行更改/合理化,更遗憾的是!),它有一个由4个表组成的麻烦的“循环”,其中有几个不同的多对多关系 我需要能够获得法院的名称、完整地址和一般说明,所有这些都只有一个法院,然后是联系方式,分为两组(一般和特定联系点),其中可能包含一个或多个列表,取决于法院。我需要它以以下格式显示: 阿伯加文尼地方法院 阿伯加文尼 NP7
阿伯加文尼
NP7 5DL
这个法庭只对听证会开放。其他法庭记录 联系人
总机:0163364XXXX
传真:0163364XXXX
服务1:0163364XXXX
服务2:0163364XXXX
联系人姓名1-代理法庭经理:01633 64xxxx
联系人姓名2-代理办公室经理:01633 64xxxx
联系人姓名3-代理名单官员:01633 64xxxx
联系人姓名4-法官书记:01633 64xxxx
我昨天在StackOverflow上发表文章,了解如何正确编写一对多关系的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";
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;
}
}
而C#看起来是这样的:
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";
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;
}
}
在C#中,我为court_contact_general_no添加了一个新字符串,并尝试在写入从这个新变量收到的响应的基础上创建另一个if/else循环
不管怎样,我得到的只是一个大的空白页或上面与SQL相关的错误
有什么想法吗
提前感谢所有/任何帮助。您需要使用不同的表名别名,以便在单个查询中多次加入同一个表
JOIN court_contacts_general CCG1
JOIN court_contacts_general CCG2.. etc
我建议将表命名为与返回的数据更相关的名称,尽管在这种情况下,它肯定不优雅(毫无疑问,有更好的编写方法!)但是我已经设法解决了这个问题,写了第二个SQL查询,并在第一个SQL连接关闭后直接打开第二个SQL连接,以标记第二批联系人 SQL查询:
string myQuery2 =
"SELECT C.court_id, court_contacts_name, court_contacts_no, court_contact_type_desc " +
"FROM court C " +
"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 = '" + court_id_no + "' " +
"ORDER BY C.court_id";
C#代码:
myDataReader.Close();
connection.Close();
SqlConnection connection2=新的SqlConnection(connStr);
SqlCommand myCommand2=新的SqlCommand(myQuery2,connection2);
SqlDataReader-myDataReader2;
连接2.Open();
myDataReader2=myCommand2.ExecuteReader();
if(myDataReader2.HasRows){
string last_id=string.Empty;
while(myDataReader2.Read()){
字符串court_id=myDataReader2[“court_id”].ToString();
字符串court_contact_desc=myDataReader2[“court_contact_type_desc”]。ToString();
字符串court_contact_name=myDataReader2[“court_contacts_name”]。ToString();
字符串court_contacts_no=myDataReader2[“court_contacts_no”]。ToString();
if(string.IsNullOrWhiteSpace(court\u contact\u no)){
法庭联系人号码=一般联系人号码;
}
如果(最后一个id!=法庭id){
回答。写下(法院联系人姓名+“-”+法院联系人姓名+”:“+法院联系人编号+”
”;
}否则{
回答。写下(法院联系人姓名+“-”+法院联系人姓名+”:“+法院联系人编号+”
”;
}
最后一个id=法庭id;
}
}
正如我所说,它并不漂亮,但重要的是它能工作。谢谢你的回复。我试过你的建议,但我又得到了一个空白屏幕。我现在已经设法解决了这个问题——我将在下面公布答案。它不优雅,但很管用。