C# Net C的内部循环

C# Net C的内部循环,c#,asp.net,.net,C#,Asp.net,.net,我想检索所有用户id下一步在我输入的用户id通过引用id从表中相互引用之后,下面的代码给出了确切的结果,但它检索2001到2005年的所有用户id 我想如果我从文本框中输入2002作为用户id,那么它必须从2003-2005检索 表xyz列用户id的值=2001、2002、2003、2004、2005 表xyz列引用id的值=2000、2001、2002、2003、2004 var gCmd = new SqlCommand(@"SELECT User_id FROM Table_xyz", n

我想检索所有用户id下一步在我输入的用户id通过引用id从表中相互引用之后,下面的代码给出了确切的结果,但它检索2001到2005年的所有用户id

我想如果我从文本框中输入2002作为用户id,那么它必须从2003-2005检索

表xyz列用户id的值=2001、2002、2003、2004、2005 表xyz列引用id的值=2000、2001、2002、2003、2004

var gCmd = new SqlCommand(@"SELECT User_id FROM Table_xyz", nCon);
SqlDataAdapter Sda = new SqlDataAdapter(gCmd);
DataTable Dt = new DataTable();
Sda.Fill(Dt);

for (int i = 0; i < Dt.Rows.Count; i++)
{
    string referenceid = Dt.Rows[i]["User_id"].ToString();

    var gCmd1 = new SqlCommand(@"SELECT User_id FROM Table_xyz 
    WHERE Reference_id = '" + referenceid + "'", nCon);

    SqlDataAdapter Sda1 = new SqlDataAdapter(gCmd1);
    DataTable Dt1 = new DataTable();
    Sda1.Fill(Dt1);

    Response.Write(referenceid);
}         

我尝试将SELECT User_id从表_xyz(其中User_id='2001')添加到第一个命令,但它只返回一个User_id与2001匹配的值这是最简单的解决方案。但是考虑重构你的代码或者思考另一种方法,这不是完美的。也可以考虑在SQL命令上使用参数。
            string initialId = Dt.Rows[0]["ID"].ToString();
            do
            {
                string dCmd = "SELECT ID FROM TableA WHERE Reference_ID = '" + initialId + "'";
                SqlDataAdapter dSda = new SqlDataAdapter();
                dSda.SelectCommand = new SqlCommand(dCmd, nCon);
                DataTable dDt = new DataTable();

                dSda.Fill(dDt);

                for (int i = 0; i < dDt.Rows.Count; i++)
                {
                    initialId = dDt.Rows[i]["ID"];
                    Response.Write(dDt.Rows[i]["ID"]);
                }
            }
            while(dDt.Rows.Count > 0)

您可以尝试这个解决方案,首先您可以获得所有不同的reference\u ID,并在此基础上循环获得ID


感谢你们所有人,我的朋友们帮助我,但不幸的是,这并没有解决主要问题

经过大量的研究,我在递归命令中得到了答案,所以最后我的代码如下

        string value = "2723022"; // <== any reference id from Reference_id column
        String gCmd = "SELECT DISTINCT Reference_id FROM myTable WHERE User_id >'" + value + "'";
        SqlDataAdapter Sda = new SqlDataAdapter();
        Sda.SelectCommand = new SqlCommand(gCmd, nCon);
        DataTable Dt = new DataTable();
        Sda.Fill(Dt);

        for (int count = 0; count < Dt.Rows.Count; count++)
        {
            string dCmd = "SELECT User_id FROM dEmo_aCcounts WHERE Reference_id = '" + Dt.Rows[count]["Reference_id"] + "'";
            SqlDataAdapter dSda = new SqlDataAdapter();
            dSda.SelectCommand = new SqlCommand(dCmd, nCon);
            DataTable dDt = new DataTable();
            dSda.Fill(dDt);

            for (int i = 0; i < dDt.Rows.Count; i++)
            {
                Response.Write(dDt.Rows[i]["User_id"]);
            }
        }

您在使用此代码时面临的问题是什么,?您是否调试以找出错误?是的,没有错误,但我认为我不理解逻辑,它只返回第一个值而不是REST。它只返回一个值,因为循环只运行一次。此数组var array=list.ToArray;只有一个值。实际上它是相同的,所以请在打开连接的第一个命令中添加引用id,然后查看。。。String cmd=从表A中选择不同的引用ID;我想添加wherereference_ID='0',类似于这个字符串cmd=SELECT DISTINCT Reference_ID FROM TableA,wherereference_ID='0';它将给出1个值,而我希望通过引用获取相互获取的整个ID。\u ID您在应用程序中尝试过此解决方案吗?因为这将为循环中的所有引用ID逐个提供所有ID。请把你的问题说得更清楚些。
        string value = "2723022"; // <== any reference id from Reference_id column
        String gCmd = "SELECT DISTINCT Reference_id FROM myTable WHERE User_id >'" + value + "'";
        SqlDataAdapter Sda = new SqlDataAdapter();
        Sda.SelectCommand = new SqlCommand(gCmd, nCon);
        DataTable Dt = new DataTable();
        Sda.Fill(Dt);

        for (int count = 0; count < Dt.Rows.Count; count++)
        {
            string dCmd = "SELECT User_id FROM dEmo_aCcounts WHERE Reference_id = '" + Dt.Rows[count]["Reference_id"] + "'";
            SqlDataAdapter dSda = new SqlDataAdapter();
            dSda.SelectCommand = new SqlCommand(dCmd, nCon);
            DataTable dDt = new DataTable();
            dSda.Fill(dDt);

            for (int i = 0; i < dDt.Rows.Count; i++)
            {
                Response.Write(dDt.Rows[i]["User_id"]);
            }
        }