2011-07-09 87 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

相关问题