1

我在数据表中查找记录。如果记录匹配,那么我想比较数据行中的值并进行一些操作。请参阅下面的代码以获得更好的解释,

        foreach (DataRow row2  in dtTo.Rows)
        {

            DataRow[] match = dtReturn.Select("Id = " + row2["Id"]);

            if (match.Length > 0)
            {
                if (match[0]["boolInt"] == 1) // Getting error on this line
                {
                    match[0]["NewValues"] = "";
                }

            }

        }

我在下一行收到错误

 if (match[0]["boolInt"] == 1)

然后 resharper 建议我转换为 bool。所以我将上面的行改为

 if( (bool) (match[0]["bClosed"] = 1))

但是当我运行项目时,我在上面的行中出现运行时错误,因为“指定的演员表无效”。在即时窗口中,当我输入时,我得到的值为 1,

(match[0]["bClosed"] 

我应该怎么做才能摆脱这个错误?

4

3 回答 3

1

您需要将值转换为 int。你可以这样做:

if (Convert.ToInt32(match[0]["boolInt"]) == 1)

但是,如果该列包含一个无法转换的值,则会出现错误。

更好的方法是:

int number;
bool result = Int32.TryParse(match[0]["boolInt"], out number);
if (result && number == 1)
于 2013-07-05T05:44:47.693 回答
1

尝试这个:

 if ((match[0]["boolInt"] as int?) == 1)
 {
     match[0]["NewValues"] = "";
 }

如果 value 为 null 或无效 int 它不会导致异常,但无论如何都应该处理。

于 2013-07-05T05:45:33.970 回答
1

据此:

不,不会有空值。该字段是tinyint

您的代码应如下所示(AFAIR,在 CLRtinyint中的 SQL 服务器匹配byte中):

if ((byte)(match[0]["boolInt"]) == 1)
{
}

如果您知道字段类型,则无需调用Convert方法。更快的方法是直接转换为该已知类型。

于 2013-07-05T06:05:45.717 回答