我的下拉列表中的项目是“水果”和“工具”,因此当我选择“水果”或“工具”时,我希望面板或标签从数据库中填充值,但我收到此错误:“数据为空”。不能对 Null 值调用此方法或属性
类别表
身份证 | 类别 |
---|---|
1 | 水果 |
2 | 工具 |
订单表
项目 | 类别 | 金额 |
---|---|---|
苹果 | 水果 | 200 |
香蕉 | 水果 | 100 |
锤子 | 工具 | 400 |
Asp.net核心控制器
[Route("TotalValue")]
[HttpGet]
public decimal TotalValue()
{
var query = "Select Sum( Amount ) as Total from Order Where Category = @Category";
string sqlDataSource = _configuration.GetConnectionString("DefaultConnection");
decimal TotalAmount = 0;
string value = "Category";
using (SqlConnection con = new SqlConnection(sqlDataSource))
{
con.Open();
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.Parameters.AddWithValue("@Category", value);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.Read())
{
TotalAmount = dr.GetDecimal(0);
}
}
}
con.Close();
}
return TotalAmount;
}
预期输出:如果我选择 Fruits 那么它应该显示 300
试试这个
[Route("TotalValue")]
[HttpGet]
public decimal TotalValue()
{
var query = "SELECT SUM(Amount) AS Total FROM [Order] WHERE Category = @Category";
string sqlDataSource = _configuration.GetConnectionString("DefaultConnection");
decimal totalAmount = 0;
string value = "Category";
using (SqlConnection con = new SqlConnection(sqlDataSource))
{
con.Open();
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.Parameters.AddWithValue("@Category", value);
using (SqlDataReader dr = cmd.ExecuteReader())
{
if (dr.HasRows && dr.Read())
{
if (!dr.IsDBNull(0))
{
totalAmount = dr.GetDecimal(0);
}
}
}
}
con.Close();
}
return totalAmount;
}
它会在调用 dr.Read() 之前检查 dr.HasRows。这可确保代码仅在查询返回行时才尝试读取数据。我们还添加了一个检查 !dr.IsDBNull(0) 来处理空值。如果值为空,则不会将其分配给totalAmount。