根据同一行的另一列中的值获取指定列的值

本文关键字:取指 一列 获取 一行 | 更新日期: 2023-09-27 18:01:43

我有这个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#中最好的方法是什么?

数据集?DataReader吗?我该怎么做呢?


如果你不明白我需要什么,这里有另一个很好的解释,感谢Tim:

我试图获得一个指定列的值基于值在同一行的另一列

根据同一行的另一列中的值获取指定列的值

根据您最近的注释,您似乎希望获得表中的所有行,然后能够根据Name列选择给定的行。

如果你的程序需要在不同的时间访问不同的行,DataTable是最好的——只要DataTable在内存/缓存中,你就可以在任何时间提取任何名称的值。

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

DataTable的例子:

假设您已经填充了DataTable(在示例中为name info),您可以使用Select方法:

DataRow[] selectedRows = info.Select("Name = 'Server'");
string serverIP = selectedRows[0]["Value"].ToString();

DateReader例子:

根据@Kobe的代码,每次前进到下一个记录时,只需检查名称,然后取出值:

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

有一些注意事项需要注意。首先,DataTable的Select方法返回一个DataRow数组,因此,如果多条记录的Name列中有"Server",就会得到多个结果。如果这是按照设计的,那很好——只需循环遍历datarow数组。

其次,如果表中有很多行,或者可能会出现这种情况,则读取器可能会变慢,这取决于感兴趣的记录在表中的位置。如果您正在处理表中匹配Name标准的多个记录的可能性,那么使用DataTable可能会更容易。

这是你正在寻找的,如果是这样让我知道,我会用USING关键字改进代码,并删除sql内联,并很快给你一个更多的答案

另一个来自Google的例子,

// 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();