8

你好我似乎无法解决这个演员操作。我得到错误:

字符串未被识别为有效的布尔值

为线

isKey = Convert.ToBoolean(row["IsKey"].ToString());

我正在使用 aDataReader来获取我的表架构。IsKey目前null在我的数据库中无处不在。我基本上想要一个truefalse结果。

tableSchema = myReader.GetSchemaTable();     

foreach (DataRow row in tableSchema.Rows)
{
    string columnName = row["ColumnName"].ToString();
    string columnType = row["DataTypeName"].ToString();               
    bool isKey = Convert.ToBoolean(row["IsKey"].ToString());
4

1 回答 1

22

首先,使用这种格式从 a 中获取值DataRow

string columnName = row.Field<string>("ColumnName");
string columnType = row.Field<string>("DataTypeName"); 
//this uses your first and second variable call as an example

这强烈定义了返回值并为您进行转换。

你的问题是你有一个列是 a bit(或者至少我希望它有点),但也允许nulls. 这意味着 c# 中的数据类型是bool?. 用这个:

bool? isKey = row.Field<bool?>("IsKey");

您的第二个问题(在评论中):

如果布尔?isKey 返回 NULL 如何将其转换为 false?

最简单的方法是使用Null-Coalescing Operator

bool isKey = row.Field<bool?>("IsKey") ?? false;

这说:“给我第一件事不是空的,要么是列值,要么是“假”。

于 2013-09-04T15:32:56.743 回答