c# - 返回的参数格式不正确
问题描述
我有一个异步任务方法,可以查询数据库表以获取特定列中的 Credits 总量。我在用于查询的方法中有一个字符串参数,用于识别登录的用户,该参数存储在Properties.Settings.Default.Student_Number;
. 数据库中学生编号的列是一个 varchar,而在我的代码中的其他任何地方都是一个字符串,但我得到一个异常说Input string was not in correct format
。知道我做错了什么
private async Task<int> Count_Credits(string student_number)
{
int count = 0;
string sql = "SELECT SUM(Module_Credit) AS TOTAL_CREDITS FROM Module_Data WHERE Student_Number=@num";
using (var conn = new SqlConnection(connString))
using (var cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.Add("@num", SqlDbType.VarChar, 55).Value = student_number;
await conn.OpenAsync();
count = int.Parse(cmd.ExecuteScalar().ToString());
}
return count;
}
我如何调用该方法
Task<int> count_credits = Count_Credits(Student_Number);
module_info.Total_Credits = await count_credits; //Exception Goes to this line
我在标签上使用绑定
module_info.Total_Credits
解决方案
ExecuteScalar
在转换类型之前,您需要检查是否返回了结果。
object result = cmd.ExecuteScalar();
if(result != null)
{
count = (int)result;
}
要进行更简洁的检查,请使用模式匹配(根据 Olivier 的评论):
if(cmd.ExecuteScalar() is int i)
{
count = i;
}
此外,您应该await
在获取值时使用方法本身:
int count_credits = await Count_Credits(Student_Number);
module_info.Total_Credits = count_credits;
推荐阅读
- amazon-web-services - 对于 RDS Oracle,我获得的 3000 预置 IOPS 的最大 IOPS 是多少?
- c++ - 将 QStandartItem 设置为 Expandable 而没有子项
- docker - docker 容器中的 Ansible 集合没有被拾取
- javascript - JavaScript 中的数组元素打印成单独的数组
- python - 如何修复matplotlib折线图中的破折号数量?Python
- kotlin - Kotlin 默认参数仅在最后起作用
- c# - 无法将地图置于特定位置的中心
- openmp - openmp 卸载功能引发错误“英特尔编译器兼容模式已禁用”
- python - Azure Devops python 脚本失败
- raspberry-pi - Ras;pberry pi I2C AM2320