C# 将一列的值获取为字符串,而将另一列的值指定为字符串?
我可以在C语言中使用DataTable.SelectfilterStatement 还是应该使用Linq 我有一个SQL查询,它返回一个DataTableDT2,其中有两列,[Username]和[LastUpdate] 我想从[LastUpdated]列中获取一个字符串,其中[Username]列等于一个字符串 为了防止这种情况发生,在SQL表中,这两种数据类型都设置为varchar50 我想发布一张图片,但我还不能,首先发布,datatable只是 用户名|上次更新 …管理2 | 2015-04-27 在本例中,如果我可以得到第二列的值,其中[Username]=“admin2” 我在C中尝试了以下方法:C# 将一列的值获取为字符串,而将另一列的值指定为字符串?,c#,sql,linq,select,datatable,C#,Sql,Linq,Select,Datatable,我可以在C语言中使用DataTable.SelectfilterStatement 还是应该使用Linq 我有一个SQL查询,它返回一个DataTableDT2,其中有两列,[Username]和[LastUpdate] 我想从[LastUpdated]列中获取一个字符串,其中[Username]列等于一个字符串 为了防止这种情况发生,在SQL表中,这两种数据类型都设置为varchar50 我想发布一张图片,但我还不能,首先发布,datatable只是 用户名|上次更新 …管理2 | 2015-
string timestamp = "";
DataRow[] dt2result = dt2.Select("Username = 'admin2'");
timestamp = dt2result[1].ToString();
我得到
System.IndexOutOfRangeException:索引超出了数组的边界
我尝试只使用DataRow dt2result=dt2.SelectUsername='admin2';没有括号[]但我得到
无法将类型“System.Data.DataRow[]”隐式转换为“System.Data.DataRow”
我尝试了不同的索引,如dt2result[0]和dt2result[1][0]等,以及dt2result.GetValue0
我知道这是一个基本问题,但请全面回答
提前谢谢
DataRow dt2result = dt2.Select("Username = 'admin2'").First();
我想你会找到正确的那一行。然后使用以下命令获取正确的列:
var timestamp=dtresult[1].ToString();
以下措施也应该起作用:
var timestamp=dt2.Select("Username = 'admin2'")[0][1].ToString();
在这种情况下,如果我能得到第二列的值
[用户名]=“admin2”
有多种方法可以获取最新更新的列值
使用您当前的代码:
DataRow[] dt2result = dt2.Select("Username = 'admin2'");
您将获得一个DataRow数组,您可以检查数组的长度并访问第一行,如下所示:
DataRow firstRow = dt2result[0];
要选择第二列的值,您需要:
var lastUpdatedValue = firstRow[1];
还有一个LINQ选项
我使用r.FieldLastUpdated,因为您有LastUpdated列的varchar数据类型。作为旁注,最好使用特定于日期时间的类型来存储日期和时间值 为什么要将varchar用于datetime字段?LastUpdated,因为我是SQL的新手,这是我尝试的第一个隐式接受“DateTime.Now”值的数据类型,其格式与我在SQL中使用DateTime字段从Ctry传递该值时的格式相同,并将其转换为cUse DateTime或datetime2中的DateTime,如果您是新手,我建议您改用实体框架。或者SqlDataReader。不要使用datatables/dataset/Sqladapters。这是一种会加快页面加载速度的做法吗?正如其他人所质疑的那样,我不知道为什么要使用字符串来存储datetime数据类型。还有,为什么要通过EF将数据读入datatable而不是强类型对象,甚至直接使用SqlDataReader?数据表/数据集很少是正确的使用方法。你在几秒钟内就回答了我所要的。我忽略了。第一个原因是我还没有引用Linq。我把自己限制在c的范围内,这很令人沮丧。谢谢你们的建议。本周我将研究SQLDataReader,对于我们在一家小型家具连锁店工作时使用的许多较小的查询来说,它似乎是正确的
var lastUpdatedValue = dt2.AsEnumerable()
.Where(r => r.Field<string>("Username") == "admin2")
.Select(r => r.Field<string>("LastUpdated"))
.FirstOrDefault();