在 C# ASP .NET 中使用列索引或列名访问 DataSet 中单元格的值有多值得推荐?
How recommendable is it to access the value of a cell in a DataSet using the index of the column or the name of the column in C# ASP .NET?
我目前正在使用 .NET 4.5.2 在 Webforms 中开发一个应用程序,架构非常简单,只是它与 数据访问层通信(DAL) 并通过 SqlConnection、SqlCommand、SqlDataAdapter 等调用存储过程,有时我 return 将 DataSet 转换为 ASPX 形式。
通过使用列索引访问单元格的值来处理数据集的可扩展性如何?
我目前是这样访问它们的:
选项A:
string foo = dtResul.Rows[0][0].ToString();
如果我想向存储过程添加一个字段,我必须非常注意 SELECT 子句中列的顺序
但是我看到另一种方式是这样的:
选项 B:
string foo = dtResul.Rows[0]["MyColumnName"].ToString();
所以我不会关心指数,但它是一样的吗?你会使用哪一个,为什么?我一直在考虑将其更改为第二种方式,但我不知道它是否重要。
这两种方法都可以,一种可能比另一种更适合您的情况,但按列名建立索引有其优点,我个人更喜欢它。
原因如下。
假设有人更改了存储过程,使得相同类型的两列的顺序被调换。
如果您使用的是数字索引,一切可能会继续工作,但不会警告您的代码使用了错误的列数据。至少直到一切都因为奇怪的原因而爆炸,需要一些时间来调试。
但是,如果您在这种情况下按列名访问,假设列只是重新排序而不是重命名,那么您的代码将继续无论重新排序如何都能正常工作.
同时,假设列 被 重命名。那么,现在您的代码将在开发过程中失败,这太棒了!现在您已收到提醒,需要在投入生产之前修复某些内容。
更新:关于可伸缩性,这几乎肯定不是问题。如果您的列数少于几千,我相信与数据库调用的成本相比,字符串查找的性能影响可以忽略不计。但如果您担心,请测试一下。
我目前正在使用 .NET 4.5.2 在 Webforms 中开发一个应用程序,架构非常简单,只是它与 数据访问层通信(DAL) 并通过 SqlConnection、SqlCommand、SqlDataAdapter 等调用存储过程,有时我 return 将 DataSet 转换为 ASPX 形式。
通过使用列索引访问单元格的值来处理数据集的可扩展性如何?
我目前是这样访问它们的:
选项A:
string foo = dtResul.Rows[0][0].ToString();
如果我想向存储过程添加一个字段,我必须非常注意 SELECT 子句中列的顺序
但是我看到另一种方式是这样的:
选项 B:
string foo = dtResul.Rows[0]["MyColumnName"].ToString();
所以我不会关心指数,但它是一样的吗?你会使用哪一个,为什么?我一直在考虑将其更改为第二种方式,但我不知道它是否重要。
这两种方法都可以,一种可能比另一种更适合您的情况,但按列名建立索引有其优点,我个人更喜欢它。
原因如下。
假设有人更改了存储过程,使得相同类型的两列的顺序被调换。
如果您使用的是数字索引,一切可能会继续工作,但不会警告您的代码使用了错误的列数据。至少直到一切都因为奇怪的原因而爆炸,需要一些时间来调试。
但是,如果您在这种情况下按列名访问,假设列只是重新排序而不是重命名,那么您的代码将继续无论重新排序如何都能正常工作.
同时,假设列 被 重命名。那么,现在您的代码将在开发过程中失败,这太棒了!现在您已收到提醒,需要在投入生产之前修复某些内容。
更新:关于可伸缩性,这几乎肯定不是问题。如果您的列数少于几千,我相信与数据库调用的成本相比,字符串查找的性能影响可以忽略不计。但如果您担心,请测试一下。