我通常习惯SQL
中的传统表格,其中我有多个columns
,其中填充了行。我执行一个存储过程并将所有数据存储在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();
}
我遇到的问题是数据库人员给了我一个存储过程,它返回一个不同的输出(与我以前的不同)。这是基于行的。
我可以访问的唯一方法,例如First Name
,如果我硬编码的位置如下:
string firstName = infoTbl.Rows[16][2].ToString();
由于这个职位可能会发生变化,所以我觉得这样做并不舒服。如何通过了解知道ElementValue
和ElementType
的名称来访问ElementName
?
有什么建议吗?
答案 0 :(得分: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();