Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在一个';循环';_C#_Asp.net_Sql Server - Fatal编程技术网

C# 在一个';循环';

C# 在一个';循环';,c#,asp.net,sql-server,C#,Asp.net,Sql Server,首先,我为这个主题含糊不清的标题道歉,很难用语言表达出来 所以…考虑到这一点,我附上了一个数据库关系图(见下文),希望能更简洁地解释它 我们继承了一个大型数据库(因此没有能力对其进行更改/合理化,更遗憾的是!),它有一个由4个表组成的麻烦的“循环”,其中有几个不同的多对多关系 我需要能够获得法院的名称、完整地址和一般说明,所有这些都只有一个法院,然后是联系方式,分为两组(一般和特定联系点),其中可能包含一个或多个列表,取决于法院。我需要它以以下格式显示: 阿伯加文尼地方法院 阿伯加文尼 NP7

首先,我为这个主题含糊不清的标题道歉,很难用语言表达出来

所以…考虑到这一点,我附上了一个数据库关系图(见下文),希望能更简洁地解释它

我们继承了一个大型数据库(因此没有能力对其进行更改/合理化,更遗憾的是!),它有一个由4个表组成的麻烦的“循环”,其中有几个不同的多对多关系

我需要能够获得法院的名称、完整地址和一般说明,所有这些都只有一个法院,然后是联系方式,分为两组(一般和特定联系点),其中可能包含一个或多个列表,取决于法院。我需要它以以下格式显示:

阿伯加文尼地方法院
阿伯加文尼
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; } }

正如我所说,它并不漂亮,但重要的是它能工作。

谢谢你的回复。我试过你的建议,但我又得到了一个空白屏幕。我现在已经设法解决了这个问题——我将在下面公布答案。它不优雅,但很管用。