指定的类型转换无效:数值单元格转换为int

本文关键字:单元格 转换 int 类型转换 无效 | 更新日期: 2023-09-27 18:04:46

通常"指定类型转换无效"的错误很容易解决。但是这个让我挠头。

我有一个SQL compact数据库集成在我的C#应用程序。目前,我正在获得当前的数据库结构,并将其放入一个数据表。我使用的SQL命令是:

select * from information_schema.columns

其中一列为NUMERIC_PRECISION,为数值。

我尝试将此信息存储在一个整数变量中,但它告诉我指定的强制类型转换无效。代码是:

int precision;
if (row["NUMERIC_PRECISION"] != DBNull.Value)
    precision = (int)row["NUMERIC_PRECISION"];

我的问题是为什么这个操作无效?单元格是一个数值,我试图将其转换为一个整数-理论上这应该工作吗?

指定的类型转换无效:数值单元格转换为int

既然你说值可以为空,我实际上会使用一个可空整数来存储它。

int? precision = null;
if(row["NUMERIC_PRECISION"] != DBNull.Value) //or whatever you want to do to make sure it actually has a value
{
    //I usually use Convert.ToInt32 since its easier, but it is also more sensative
    precision = Convert.ToInt32(row["NUMERIC_PRECISION"]);
}

Convert类很容易使用,并且明显有很多意义,它对空值或格式不正确的值非常敏感,当它发现一个时抛出异常。

row["NUMERIC_PRECISION"]返回包含数字类型框的对象。您只能将它强制转换为这个盒装对象的确切类型。

尝试先转换为(decimal)或(long),然后再转换为(int)。

您可以使用调试器监视检查行["NUMERIC_PRECISION"]的类型。

你也可以要求Convert类为你处理转换:

precision = Convert.ToInt32(row["NUMERIC_PRECISION"]);

尝试使用int。解析而不是简单的转换为int - http://msdn.microsoft.com/en-us/library/system.int32.parse.aspx

[EDIT]现在你说这是一个字符串:你必须解析它。

Try: precision = int.Parse((string)row["NUMERIC_PRECISION"]);

如果格式不正确,将抛出异常,因此您必须准备好捕获异常,或者使用int.TryParse()的重载来检查其有效性。

[EDIT2]

似乎数据不是字符串;它是一台Int16。所以这样做:

precision = (Int16)row["NUMERIC_PRECISION"];

最佳实践是:int.Parse(string s)

precision= Convert.ToInt32(row["NUMERIC_PRECISION"]);