2017-08-03 134 views
-7

我想在我通过Reference_id从表中引用对方后检索所有User_id,下面的代码给出了确切的结果,但它从“2001到2005”中检索到所有User_id。C#的循环内部循环#

我想,如果我从一个文本框中输入 “2002” 作为USER_ID那么就必须从 “2003年至2005年” 检索

Table_xyz列USER_ID具有价值= 2001年,2002年,2003年,2004年,2005年 Table_xyz列REFERENCE_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从Table_xyz其中USER_ID = '2001'” 的第一个命令,但是它只返回其中USER_ID匹配单个值“ 2001“

+0

要使用此代码面临什么问题,?你调试了解哪些是错的? –

+0

是的没有错误,但我认为我不理解逻辑, 它只返回第一个值而不是休息 –

+0

它只返回一个值,因为循环只运行一次。这个数组''var array = list.ToArray();''只有一个值。 –

回答

0

这是最简单的解决方案。但考虑重构你的代码或考虑另一种方法,这不是perfomatic。还要考虑在你的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) 
0

你可以试试这个解决方案中,第一你可以得到所有不同Refrence_ID,并且可以循环得到IDs

var gCon = ConfigurationManager.ConnectionStrings["myCon"].ConnectionString; 
using (var nCon = new SqlConnection(gCon)) 
{ 
    try 
    { 
     nCon.Open(); 
     String cmd = "SELECT DISTINCT Refrence_ID FROM TableA"; 
     SqlDataAdapter adapter = new SqlDataAdapter(); 
     adapter.SelectCommand = new SqlCommand(cmd, nCon); 
     DataTable Dt = new DataTable(); 
     adapter.Fill(Dt); 

     for (int count = 0; count < Dt.Rows.Count(); count++) 
     { 
      string dCmd = "SELECT ID FROM TableA WHERE Reference_ID = '" + dt.Rows[count]["Refrence_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]["Distributor_ID"]); 
      } 
     } 
    } 
    catch (Exception e) 
    { 
     Response.Write(e.ToString()); 
    } 
    finally { nCon.Close(); } 
} 
+0

其实它是一样的,所以请在连接打开的第一个命令中添加一个引用ID,然后参阅... String cmd =“SELECT DISTINCT Refrence_ID FROM TableA”; 我想添加WHERE Reference_ID ='0'(类似这样的) String cmd =“SELECT DISTINCT Refrence_ID FROM TableA WHERE Reference_ID ='0'”; 它会给出1的值,而不是我想通过Reference_Id获取整个ID的对方 –

+0

您是否在应用程序中尝试了这种解决方案?因为这将循环显示所有Refrence_ID的所有ID。请更清楚地阐述你的问题。 –

0

感谢在座的各位朋友的努力帮助基于但不幸的是,这并没有解决主要问题。

大量的研究对同一后我得到了我的答案在“递归命令”,所以最后我的代码如下

 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"]); 
      } 
     }