从 DataRow 获取值之间的区别

发布于 2024-11-30 08:02:38 字数 479 浏览 0 评论 0原文

示例代码:

    DataTable table = new DataTable();

    // ...
    // insert column to table

    table.Columns.Add("name");

    // ...
    // insert value to table

    foreach (DataRow row in table.Rows) {
         row["name"];
         row.Field<string>("name");     
    }

我的问题是:

  • 使用 row["name"]row.Field("name") 之间有区别吗?当然,第二种方式将值转换为某种类型,但是还有其他区别吗?
  • 使用哪种方法更好?

Sample code:

    DataTable table = new DataTable();

    // ...
    // insert column to table

    table.Columns.Add("name");

    // ...
    // insert value to table

    foreach (DataRow row in table.Rows) {
         row["name"];
         row.Field<string>("name");     
    }

My question is:

  • Is there a difference between using row["name"] and row.Field<string>("name")? Of course, the second way cast value to some type, but is there another difference?
  • Which method is better to use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

闻呓 2024-12-07 08:02:38

请参阅备注部分,其中描述了主要差异:

DataSet 类用 Value 实例表示 null
DBNull 类的。语言集成查询 (LINQ) 表达式
访问具有 null 值的列将生成
运行时InvalidCastException。此外,DataSet
支持可空类型。 Field 方法提供了支持
可空类型访问列。如果基础价值在
DataSet 是 Value,返回的可空类型的值为

如果指定的DataColumn的值为空并且T
引用类型或可为空类型,返回类型将为null。这
Field 方法不会返回 Value。

Field 方法不执行类型转换。如果输入
需要转换,您应该首先通过以下方式获取列值
使用字段方法。然后该列值应转换为
另一种类型。

最后一段指出了一点,因为我经常看到数字以字符串形式存储在数据库中,因此在数据检索时需要将 varchar 转换为 int,因此在本例中使用DataColumn 更好,例如:

int test = row.Field<int>("Test"); // InvalidCastException
int test = Convert.ToInt32(row["Test"]); // Works like a charm

DataRowExtensions.Field;方法 (DataRow, String) 首次出现在 .NET 3.5 中,它“提供对指定行中每个列值的强类型访问。Field 方法还支持可空类型。 ”

Afaik,row["name"] 返回 objectrow.Field("name") 返回 String< /代码>。
我们不应该比较苹果和梨,因此您应该问哪个更好:

row["name"].ToString()row.Field("name")
答案是:它们是相同的。

See Remarks section, main differences described there:

The DataSet class represents null values with the Value instance
of the DBNull class. A Language-Integrated Query (LINQ) expression
that accessed a column with a null value would generate a
InvalidCastException at run time. Additionally, DataSet does not
support nullable types. The Field method provides support for
accessing columns as nullable types. If the underlying value in the
DataSet is Value, the returned nullable type will have a value of
null.

If the value of the specified DataColumn is null and T is a
reference type or nullable type, the return type will be null. The
Field method will not return Value.

The Field method does not perform type conversions. If type
conversion is required, you should first obtain the column value by
using the Field method. The column value should then be converted to
another type.

The last paragraph makes a point as I've often seen numbers stored as strings in database, therefore varchar to int conversion would be required on data retrieval, so in this case using DataColumn is better, e.g.:

int test = row.Field<int>("Test"); // InvalidCastException
int test = Convert.ToInt32(row["Test"]); // Works like a charm

DataRowExtensions.Field<T> Method (DataRow, String) first appeared in .NET 3.5 and it "provides strongly-typed access to each of the column values in the specified row. The Field method also supports nullable types."

Afaik, row["name"] returns object, row.Field<string>("name") returns a String.
We shouldn't be comparing apples and pears, hence you should be asking what's better:

row["name"].ToString() vs row.Field<string>("name")
and the answer is: they're same.

摘星┃星的人 2024-12-07 08:02:38

这取决于您的目的,但如果您查看两者的定义,可能会告诉您;

DataRow.Item 属性 (DataColumn) row["name" ]

DataRowExtensions.Field 方法(DataRow, DataColumn) row.Field("name")

It depends on your purpose but if you look at a definition of both that may tell you;

DataRow.Item Property (DataColumn) row["name"]

DataRowExtensions.Field Method (DataRow, DataColumn) row.Field<string>("name")

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文