访问列值时指定的强制转换无效
本文关键字:转换 无效 访问 | 更新日期: 2023-09-27 18:21:11
我正在数据表中查找记录。如果记录匹配,那么我想比较数据行中的值并进行一些操作。请参阅下面的代码以获得更好的解释,
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)
然后雷沙佩尔建议我选布尔。所以我把上面的线路改成
if( (bool) (match[0]["bClosed"] = 1))
但当我运行该项目时,我会在上面的行中得到运行时错误,即"指定的强制转换无效"。在即时窗口中,当我键入时,我得到的值为1
(match[0]["bClosed"]
我应该怎么做才能消除这个错误?
根据此:
不,不会有空。该字段不存在
您的代码应该是这样的(AFAIR,SQL server中的tinyint
与CLR中的byte
匹配):
if ((byte)(match[0]["boolInt"]) == 1)
{
}
如果您知道字段类型,就不需要调用Convert
方法。更快的方法是直接转换为已知类型。
您需要将值转换为int。您可以这样做:
if (Convert.ToInt32(match[0]["boolInt"]) == 1)
但是,如果列中包含一个无法强制转换的值,则会出现错误。
一个更好的途径是:
int number;
bool result = Int32.TryParse(match[0]["boolInt"], out number);
if (result && number == 1)
试试这个:
if ((match[0]["boolInt"] as int?) == 1)
{
match[0]["NewValues"] = "";
}
如果值为null或不是有效的int,它不会引起异常,但无论如何都应该进行处理。