C# 为什么行[0]将整个表返回到DataRow?

C# 为什么行[0]将整个表返回到DataRow?,c#,datatable,C#,Datatable,当我在代码末尾查看dr的行数时,它表示这是一个表,并且与dt的行数相同 为什么? 静态公共bool GetLastMTM(out DataRow dr) { dr=null; 尝试 { string commandText=“按[TIMESTAMP]DESC从[“+DBName+”].[dbo].[tblMTM]顺序选择[TIMESTAMP]; SqlCommand cmd=新的SqlCommand { 连接=连接, CommandText=CommandText }; cmd.ExecuteN

当我在代码末尾查看dr的行数时,它表示这是一个表,并且与dt的行数相同

为什么?

静态公共bool GetLastMTM(out DataRow dr)
{
dr=null;
尝试
{
string commandText=“按[TIMESTAMP]DESC从[“+DBName+”].[dbo].[tblMTM]顺序选择[TIMESTAMP];
SqlCommand cmd=新的SqlCommand
{
连接=连接,
CommandText=CommandText
};
cmd.ExecuteNonQuery();
SqlDataAdapter da=新的SqlDataAdapter(cmd);
数据集ds=新数据集();
DataTable dt=新的DataTable();
ds.Reset();
da.填充(ds);
dt=ds.表[0];
如果(dt.Rows.Count<1)
返回false;
dr=dt.行[0];
返回true;
}
捕获(异常er)
{
返回false;
}
}
  • dr{System.Data.DataRow}System.Data.DataRow HASRERRORS false bool
  • ItemArray{object[1]}object[]RowError“”字符串RowState未更改System.Data.DataRowState
  • 表{Table}System.Data.DataTable
  • base{Table}System.ComponentModel.MarshallByValueComponent{System.Data.DataTable}区分大小写的假布尔
  • ChildRelations{System.Data.DataRelationCollection.DataTableRelationCollection}System.Data.DataRelationCollection {System.Data.DataRelationCollection.DataTableRelationCollection}
  • 列{System.Data.DataColumnCollection}System.Data.DataColumnCollection
  • 约束{System.Data.ConstraintCollection}System.Data.ConstraintCollection
  • 数据集{System.Data.DataSet}System.Data.DataSet
  • DefaultView{System.Data.DataView}System.Data.DataView显示表达式“”字符串
  • ExtendedProperties计数=0 System.Data.PropertyCollection有错误false bool初始化为true bool
  • 区域设置{en GB}System.Globalization.CultureInfo最小容量50 int命名空间“”字符串
  • ParentRelations{System.Data.DataRelationCollection.DataTableRelationCollection}System.Data.DataRelationCollection {System.Data.DataRelationCollection.DataTableRelationCollection} 前缀“”字符串 PrimaryKey{System.Data.DataColumn[0]}System.Data.DataColumn[] RemotingFormat Xml System.Data.SerializationFormat
  • 行{System.Data.DataRowCollection}System.Data.DataRowCollection
  • base{System.Data.DataRowCollection}System.Data.InternalDataCollectionBase {System.Data.DataRowCollection}计数699 int

“监视窗口”具有遍历私有引用和父对象的功能,这些引用和父对象通常是隐藏的,无法从代码中访问。在本例中,您看到的是
DataRow.Table
属性,它只是对父对象的引用。如果深入查看Table.Row[0],您可以再次看到Table属性,也可以再次看到该表。你可以在你的空闲时间做这件事,并且为了好玩而不断地深入。我已经浪费了好几天的时间试图爬到树的尽头。

“当我看行数”你们是怎么做到的?您是否在调试器中将鼠标悬停在其上?还是使用手表窗口?鼠标是否在正确的变量上?你打字打错了吗?(
dr
dt
仅相隔一个键等)。停止写入两个字母的变量名。每个编辑器都有代码完成,使用两个字母的变量所能实现的唯一一件事就是让任何试图阅读代码的人感到恼火。这是对编程技术的侮辱。使用描述性变量名。一直都是,是的,我在徘徊。但这是手表的黄色输出(见问题)。dr似乎是一个包含699行的表……呃,您是否正在查看数据行上的
行数?沃特
static public bool GetLastMTM(out DataRow dr)
{
    dr = null;

    try
    {
        string commandText = "SELECT [TIMESTAMP] FROM [" + DBName + "].[dbo].[tblMTM] ORDER BY [TIMESTAMP] DESC";

        SqlCommand cmd = new SqlCommand
        {
            Connection = conn,
            CommandText = commandText
        };

        cmd.ExecuteNonQuery();


        SqlDataAdapter da = new SqlDataAdapter(cmd);


        DataSet ds = new DataSet();
        DataTable dt = new DataTable();

        ds.Reset();

        da.Fill(ds);

        dt = ds.Tables[0];

        if (dt.Rows.Count < 1)
            return false;

        dr = dt.Rows[0];

        return true;
    }
    catch (Exception er)
    {
        return false;
    }
}