在类型转换中出现错误-输入字符串格式不正确

本文关键字:输入 字符串 格式 不正确 错误 类型转换 | 更新日期: 2023-09-27 18:18:03

这一行int number = int.Parse(Days);

出现错误

输入字符串格式不正确。

public string GetApprovedLimit(int CategoryId)
{
    SqlConnection connection = new SqlConnection(GetConnectionString());
    SqlCommand cmdLog = new SqlCommand();
    cmdLog.CommandType = CommandType.StoredProcedure;
    cmdLog.Connection = connection;
    cmdLog.Transaction = Trans;
    connection.Open();
    cmdLog.CommandText = "ApprovedDays";
    cmdLog.Parameters.AddWithValue("@CategoryId", CategoryId);
    string Days = cmdLog.ExecuteScalar() == null ? "1" : cmdLog.ExecuteScalar().ToString();
    connection.Close();
    int number = int.Parse(Days);
    Days = (number + 20).ToString(); // Added extra 20 days for late link submission
    return Days;
}
存储过程:

Create Proc [dbo].[ApprovedDays]
(
    @CategoryId int
)
as begin
select ApprovedDays from tbl_Category where CategoryId=@CategoryId
end
GO

在类型转换中出现错误-输入字符串格式不正确

  • 如果cmdLog.ExecuteScalar()的结果为null,则没有问题。
  • 如果行存在,但在此列中有NULL, cmdLog.ExecuteScalar()的结果是DBNull.Value, DBNull.Value.ToString()返回一个空字符串,这会导致您的异常。

相反,你应该将它转换为正确的类型,这似乎是一个int:

int days = 1;
object obj = cmdLog.ExecuteScalar();
if(obj != null && DBNull.Value != obj)
{
    days = (int) obj;
}

除此之外,条件运算符执行两次查询。将其存储在一个变量中。

从你的问题来看,你似乎正在试图解析一个空字符串。
你可以尝试的事情

int number = string.IsNullOrEmpty(days) ? 0 : int.Parse(days);

     if (int.TryParse(days, out number))
        {// Conversion succeeded}
     else
       {
         //failed
        }

MSDN说:int.TryParse将数字的字符串表示形式转换为其等效的32位有符号整数。返回值指示转换是否成功