从不同类型的数据表中读取

本文关键字:读取 数据表 同类型 | 更新日期: 2023-09-27 18:30:46

   if (_dt.Rows.Count > 0)
            {
                foreach (DataRow row in _dt.Rows)
                {
                    pUsername = row["tUsername"] == DBNull.Value ? " " : row["tUsername"].ToString();
                    pDomain = row["tDomain"] == DBNull.Value ? " " : row["tDomain"].ToString();
                    pStatus = row["tStatus"] == DBNull.Value ? 0 : Convert.ToInt32(row["tStatus"].ToString());
                    // pAdmin = (bool)row["tInstallType"];
                }
            }

如何从数据表中读取不同类型的数据?我每次都必须去串吗? .为什么我不能从数据库中读取为整数类型?我认为主要问题是row["tStatus"].ToString()

从不同类型的数据表中读取

您可以直接从数据表中读取整数:

int myInt = row.Field<int>("myInt");
int? myNullableInt = row.Field<int?>("myNullableInt");  // NULL (DB) -> null (C#)
int myInt = row.Field<int?>("myNullableInt") ?? 0;      // NULL (DB) -> 0 (C#)

这使用 .net 3.5 中引入的新 DataRowExtensions.Field 方法。显然,这不仅限于int,而是适用于所有基元 C# 类型及其可为 null 的对应项。请注意,与索引器相反,Field返回数据库 NULL 值的null,而不是 DBNull.Value。

有一个通用的扩展方法 DataRow.Field,所以在你的 pUsername 示例中,你可以执行以下操作:

string pUsername = row.Field<string>( "tUsername" );

int? pStatus = row.Field<int?>("tStatus")

哪些是imo,也更干净。

DataRow 有 Field 语言扩展方法。

foreach (DataRow row in dt.Rows)
{
    Console.WriteLine("{0} - {1}",row.Field<string>("FirstName"), row.Field<int?>("SomeIntField"));
}