2014-12-15 3 views
2

Я обычно привык к традиционной таблице в SQL, где у меня есть несколько columns с заполненными строками. Я выполняю хранимую процедуру и сохраняю все данные в DataTable и просматриваю таблицу, чтобы получить нужные мне результаты. Например,Получить значения из DataTable по имени строки и столбца

public static DataTable getInfo (string sessionID) 
    { 
     try 
     { 
      SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["SandBox"].ConnectionString); 
      SqlCommand cmd = new SqlCommand("GetSessionInfo", conn); 
      cmd.Parameters.AddWithValue("SessionGUID", sessionID); 
      cmd.CommandType = CommandType.StoredProcedure; 
      DataTable dt = new DataTable(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(dt); 
      return dt; 
     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

Я загрузите DataTable:

DataTable infoTbl = new DataTable(); 
infoTbl = getInfo(lbldatabasesessionID.Text); 

И я хотел бы использовать foreach цикл в цикле через DataTable.

foreach (DataRow row in infoTbl.Rows) 
{ 
    string x = col.ToString(); 
} 

Проблема Я бегу в это парень базы данных дал мне хранимую процедуру, которая возвращает другой вывод (отличный от того, что я привык к). Это строка на основе.

enter image description here

Единственный способ, которым я могу получить доступ к примеру First Name если я жесткий код позиции, как:

string firstName = infoTbl.Rows[16][2].ToString(); 

Я не чувствую себя комфортно делать это, так как положение потенциально может измениться. Как мне получить доступ к ElementValue, зная имя, зная, ElementType и ElementName?

Любые предложения?

ответ

2

Использование DataSet:

 string firstName = string.Empty; 

     DataRow row = table.Select("ElementType = 'Demographics' AND ElementName = 'FirstName'").FirstOrDefault(); 

     if (row != null) 
     { 
      firstName = (string)row["ElementValue"]; 
     } 

Использование Linq:

 string firstName = table.AsEnumerable() 
      .Where(f => f.Field<string>("ElementType") == "Demographics" && 
       f.Field<string>("ElementName") == "FirstName") 
      .Select(f => f.Field<string>("ElementValue")).FirstOrDefault(); 
+0

спасибо. Это то, что мне нужно. – smr5

Смежные вопросы