2017-08-03 138 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"]); 
      } 
     }