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()
答案 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"));
}