在C#ASP.NET中,使用列的索引或列的名称访问数据集中单元格的值有多可取?

在C#ASP.NET中,使用列的索引或列的名称访问数据集中单元格的值有多可取?,c#,asp.net,webforms,C#,Asp.net,Webforms,我目前正在使用.NET 4.5.2在Webforms中开发一个应用程序,该体系结构非常简单,只是它与数据访问层(DAL)通信,并通过SqlConnection、SqlCommand、SqlDataAdapter等进行。调用存储过程时,我会不时将数据集返回到ASPX表单 通过使用列的索引访问数据集单元格的值,数据集的可伸缩性如何 我目前访问它们的方式如下: 选项A: string foo = dtResul.Rows[0][0].ToString(); string foo = dtResul.

我目前正在使用.NET 4.5.2在Webforms中开发一个应用程序,该体系结构非常简单,只是它与数据访问层(DAL)通信,并通过SqlConnection、SqlCommand、SqlDataAdapter等进行。调用存储过程时,我会不时将数据集返回到ASPX表单

通过使用列的索引访问数据集单元格的值,数据集的可伸缩性如何

我目前访问它们的方式如下:

选项A:

string foo = dtResul.Rows[0][0].ToString();
string foo = dtResul.Rows[0]["MyColumnName"].ToString();
如果我想在存储过程中添加一个字段,我必须非常小心SELECT子句中列的顺序

但我看到了另一种方式,它是这样的:

选项B:

string foo = dtResul.Rows[0][0].ToString();
string foo = dtResul.Rows[0]["MyColumnName"].ToString();

因此,我不会担心这些指数,但这是否相同呢?你会用哪一个?为什么?我一直在考虑用第二种方法对其进行更改,但我不知道这是否重要。

两种方法都很好,一种可能比另一种更适合您的场景,但按列名索引有很多优点,我个人更喜欢这种方法

原因如下

假设有人更改了存储过程,从而交换了相同类型的两列的顺序

如果您使用的是数字索引,那么一切都可以继续工作,但不会出现代码使用错误列数据的警告。至少直到一切都因为奇怪的原因而爆炸,需要一段时间来调试

但是,如果在此场景中按列名访问,假设列只是重新排序而没有重命名,那么无论重新排序如何,代码都会继续正常工作

同时,假设列被重命名。嗯,现在您的代码在开发过程中会失败,这太棒了!现在,您已收到警告,需要在产品投入生产之前修复某些内容


更新:关于可伸缩性,几乎可以肯定,这两种方式都不值得关注。如果您的列不到几千列,我相信与数据库调用的成本相比,字符串查找的性能影响可以忽略不计。但是如果你担心的话,就测试一下。

好奇为什么这个问题被否决了。它似乎符合一个有效问题的标准。我认为,就这个问题征求某人的意见变得越来越困难。。。