根据同一行的另一列中的值获取指定列的值
本文关键字:取指 一列 获取 一行 | 更新日期: 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();