这里我试着编写一个函数,根据以下条件返回值...
如果
变量为NULL,返回DBNull.Value
ELSE
将变量转换为DataTypeCode作为函数参数提供给我的DataType。例如。
现在,在将变量转换为必需的DataType时,会抛出异常“FormatException未处理”。输入字符串的格式不正确。
如何解决此错误请帮助。
这是我的代码......
public object ReturnDBNullOrRequiredDatatype(object IsThisObjectANull, TypeCode DataTypeCode)
{
return IsThisObjectANull == null ? DBNull.Value : Convert.ChangeType(IsThisObjectANull, DataTypeCode);
}
我将此功能称为 ReturnDBNullOrRequiredDatatype(txtFirstName.text,Integer变量的TypeCode) 第二个参数是要转换第一个参数的数据类型。
我正在尝试将此值返回
SqlParameter spAmount = new SqlParameter(...) spName.value = DbNull.value
或
SqlParameter spName = new SqlParameter(...) spAmount.value = Cint中(txtName.text)
我正在尝试使用该功能执行此操作。 我确保传递给该函数的值将满足我的转换类型,但仍然会出现此错误。
答案 0 :(得分:1)
FormatException告诉您对象(在您的情况下是一个字符串)无法转换为请求的类型(在您的情况下,整数)。传入的字符串可能不是有效数字,例如“abc”而不是“123”;或者,对于您的DateTime案例,它不是当前文化的有效日期时间字符串,例如“12/31/2009 12:34:56”当你在dd / MM / yyyy语言环境中。尝试传递IFormatProvider,例如CultureInfo.InvariantCulture,它映射到您希望用户输入的日期时间格式。
答案 1 :(得分:1)
Convert.IsDBNull
的文档说明如下:
返回指示对象是否为DBNull类型的指示。
该文档还明确指出DBNull.Value
不等同于空引用或string.Empty
。
因此,如果您向其传递null
或空字符串,则该方法应返回false。我相信你真正想做的是:
if (IsThisObjectANull == null)
return DBNull.Value;
else
return Convert.ChangeType(IsThisObjectANull, DataTypeCode);
...或更短的版本:
return IsThisObjectANull == null ? DBNull.Value : Convert.ChangeType(IsThisObjectANull, DataTypeCode);