Получение значения указанного столбца на основе значения в другом столбце той же строки? - PullRequest
0 голосов
/ 10 июля 2011

У меня есть эта таблица 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?И как мне это сделать?


Если вы не поняли, что мне нужно, это еще одно хорошее объяснение Тиму:

Я пытаюсь получитьзначение указанного столбца на основе значения в другом столбце той же строки

Ответы [ 2 ]

1 голос
/ 10 июля 2011

Судя по вашим последним комментариям, вы хотите получить все строки в таблице, а затем иметь возможность выбрать данную строку на основе столбца Имя.

DataTable лучше всего подойдет, если вашей программе потребуется доступ к различным строкам в разное время - пока DataTable находится в памяти / кэшируется, вы можете получить значение для любого имени в любое время.

Если вам просто нужно сделать это один раз, SqlDataReader, вероятно, будет быстрее, но только для пересылки.

Пример DataTable:

Предполагая, что вы уже заполнилиDataTable (имя name в примере), вы можете использовать метод Select:

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

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

Пример DateReader:

На основе кода @ Kobe просто проверяйте Name каждый раз, когда вы переходите кследующая запись, а затем вытащите значение:

bool valueFound = false;

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

Есть несколько предостережений, о которых нужно знать.Во-первых, метод Select объекта DataTable возвращает массив DataRow, поэтому, если в столбце «Имя» более чем у одной записи есть «Сервер», вы получите несколько результатов.Если это так, то все в порядке - просто переберите массив DataRows.

Во-вторых, если в таблице много строк или есть потенциал в будущем, читатель может работать медленнее в зависимостио том, где интересующая запись находится в таблице.И если вы имеете дело с возможностью того, что несколько записей в таблице будут соответствовать критериям имени, возможно, проще всего придерживаться DataTable.

0 голосов
/ 10 июля 2011

Это то, что вы ищете, если так, дайте мне знать, я уточню код с помощью ключевого слова 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...