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

时间:2011-07-09 22:23:48

标签: c# .net sql select dataset

我有这个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来说是另一个好的解释:

我正在尝试根据同一行中另一列中的值获取指定列的值

2 个答案:

答案 0 :(得分:1)

根据您的最新评论,您似乎想要获取表中的所有行,然后能够根据“名称”列选择给定的行。

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

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

DataTable示例:

假设您已经填充了DataTable(示例中的名称信息),您可以使用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”,您将获得多个结果。如果这是设计的,那很好 - 只需循环遍历DataRows数组。

其次,如果表格中有很多行,或者潜在的可能性,读者可能会更慢,具体取决于感兴趣的记录在表格中的位置。如果您正在处理符合Name条件的表中多个记录的可能性,那么只需坚持使用DataTable就可能更容易了。

答案 1 :(得分:0)

这是你在寻找什么,如果是这样,请告诉我,我将使用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();