我正在尝试将字符串转换为NULL,以便MySQL可以处理它。但是,我得到"无法将字符串转换为双精度"。 我想抛出一个异常,以便我可以处理输入的任何字符串,可以这样做吗?
try
{
Double dDate = Convert.ToDouble(cellData);
DateTime dt = DateTime.FromOADate(dDate);
cellString = dt.ToString("yyyy-MM-dd");
if (cellString.Length == 0)
cellString = "NULL";
else
cellString = "'" + MySqlHelper.EscapeString(cellString) + "'";
// throw new EncoderFallbackException("Testing 123");
}
catch (InvalidCastException)
{
cellString = "NULL";
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
oWorkbook.Close();
m_iSystemOk = false;
return bResult;
}
更新 OP 评论后对答案
cellData
的定义如下:
var cellData = oWorksheet.Cells[row, col].Value2;
string cellString = "";
if (cellData != null)
{
if (col == 6 || col == 9 || col == 10)
{
try (code continues as above statement)
此行可能会导致问题,因为cellData
中的任何内容都没有成功转换为double
:
Double dDate = Convert.ToDouble(cellData);
与其Convert.ToDouble
,不如尝试使用double.TryParse
:
if (double.TryParse(cellData, out double dDate))
{
... The rest of your code
}
else
{
// cellData is NOT a double. Do something here to handle it
}
更改此值的原因是TryParse
返回一个布尔值,指示它是否成功,而不是引发异常。
这为您提供了一种处理转换失败的优雅方法。
我有错误的例外。更改为捕获(格式异常(及其工作