2011-07-09 136 views
0

我有這樣的SQL表:根據同一行另一列中的值獲取指定列的值?

TABLE: Info 

COLUMNS:| Name | Value 
--------|----------|------------------ 
ROW: | Server | 255.255.255.255 
ROW: | Host | 212.212.212.212 
ROW: | User | Admin 

我選擇這樣的表:SELECT * FROM Info

現在經過我在此表中得到了所有。

我想獲得值Where Name = 'Server'並將其放入Server變量。

什麼是最好的方法在C#中做到這一點?

DataSet? DataReader的?我該如何做到這一點?


如果你不明白我需要在這裏是另一個很好的解釋THX添:

我想基於相同的另一列中的值來獲得指定列的值排

+0

什麼是您的服務器變量?一類?一個字符串?您是否試圖根據同一記錄的另一列中的值來獲取指定列的值?目前尚不清楚你想要完成什麼。 – Tim

+0

@Tim他們都是VarChar。 &是的,我試圖根據同一記錄(行)的另一列中的值來獲取指定列的值 – Danpe

+0

請在我的評論下方@Kobe – Tim

回答

1

根據您的最新評論,看來你想獲得表中的所有行,然後可以選擇一個給定的行基於名稱列。

如果您的程序需要在不同時間訪問不同的行,DataTable將會是最好的 - 只要DataTable在內存/緩存中,您可以隨時抽取任意名稱的值。

如果你只需要做一次,一個SqlDataReader可能會更快,但它的只向前。

數據表例如:

假設你已經填補了數據表(在本例中的名稱信息),您可以使用選擇方法:

DataRow[] selectedRows = info.Select("Name = 'Server'"); 

string serverIP = selectedRows[0]["Value"].ToString(); 

DateReader例如:

基於@科比的代碼,只需在每次前進到下一條記錄時檢查名稱,然後將值拉出:

bool valueFound = false; 

while (reader.Read() && !valueFound) 
{ 
    if (reader["Name"].ToString() == "Server") 
    { 
     serverIP = reader["Value"].ToString(); 
     valueFound = true; 
    } 
} 

有一些注意事項需要注意。首先,DataTable的Select方法返回一個DataRow數組,所以如果名稱列中有多個記錄具有「Server」,則會得到多個結果。如果這是通過設計,那很好 - 只需循環訪問DataRows數組即可。第二,如果表中有很多行,或者路上有潛力,讀者可能會慢一些,這取決於表中的感興趣記錄的位置。如果你在處理符合Name標準的表中有多個記錄的可能性,那麼只需堅持使用DataTable就可以更容易。

+0

謝謝:)我沒有使用'WHERE'子句,因爲我想獲得1命令中的所有信息(1請求)來自SQL。 – Danpe

0

這是你在找什麼,如果是的話讓我知道,我會改進代碼已經使用關鍵字和刪除SQL內聯和發佈你一個答案很快從

一個例子谷歌,

// instantiate and open connection 
      conn = new 
       SqlConnection("Server=(local);DataBase=Northwind;Integrated Security=SSPI"); 
      conn.Open(); 

      // don't ever do this! 
//   SqlCommand cmd = new SqlCommand(
//    "select * from Customers where city = '" + inputCity + "'"; 

      // 1. declare command object with parameter 
      SqlCommand cmd = new SqlCommand(
       "select * from Customers where city = @City", conn); 

      // 2. define parameters used in command object 
      SqlParameter param = new SqlParameter(); 
      param.ParameterName = "@City"; 
      param.Value   = inputCity; 

      // 3. add new parameter to command object 
      cmd.Parameters.Add(param); 

      // get data stream 
      reader = cmd.ExecuteReader(); 

      // write each record 
      while(reader.Read()) 
      { 
       Console.WriteLine("{0}, {1}", 
        reader["CompanyName"], 
        reader["ContactName"]); 
      } 
     } 
     finally 
     { 
      // close reader 
      if (reader != null) 
      { 
       reader.Close(); 
      } 

      // close connection 
      if (conn != null) 
      { 
       conn.Close(); 
      } 
     } 

其他例子...

SqlCommand sqlComm = new SqlCommand("SELECT * FROM Info where name='+server+'", sqlConn); 
    SqlDataReader r = sqlComm.ExecuteReader(); 
    while (r.Read()) { 
     string name = (string)r["Name"]; 
     Debug.WriteLine(username + "(" + userID + ")"); 
    } 
    r.Close(); 
+0

我知道該怎麼做。但我想獲得1查詢中的所有值。 – Danpe

+0

如果您需要該記錄中的所有值,則只需爲每列添加其他行即字符串server =(string)r [「Server」]; string host =(string)r [「Host」];等等。r.Read()前進到結果集中的下一條記錄,並且可以使用正常的C#語法訪問該記錄中的每一列(r []) – Tim

+0

您仍然沒有明白,請檢查我的新的完美。 我沒有「服務器」列,「服務器」是**值**。 – Danpe

相關問題