在类型转换中出现错误-输入字符串格式不正确
本文关键字:输入 字符串 格式 不正确 错误 类型转换 | 更新日期: 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位有符号整数。返回值指示转换是否成功