从数据表中读取不同类型

时间:2016-01-17 16:57:19

标签: c#

   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()

3 个答案:

答案 0 :(得分:2)

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

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#类型及其可空的对应类型。请注意,与索引器相反,Field为数据库NULL值而不是DBNull.Value返回null

答案 1 :(得分:0)

有一个通用扩展方法DataRow.Field,因此在您的pUsername示例中,您可以这样做:

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

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

哪些是imo,也更清洁。

答案 2 :(得分:0)

DataRow有Field种语言扩展方法。

实施例

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