You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET(C#)中检查SQL Server表用户评分列是否为空的实现问题

问题修正方案

现有代码核心问题梳理

  • 原查询SQL缺bookTitle过滤条件:评分表主键是(bookTitle, userID),仅按用户ID查询会拿到该用户所有书籍的评分,无法匹配当前页面展示的书籍
  • 直接拼接SQL字符串存在SQL注入风险,必须改用参数化查询
  • INSERT语句语法错误:INSERT语句不支持WHERE子句,且缺失必填的bookTitle、userID字段赋值
  • 原有逻辑结构颠倒:应该先执行查询,再根据是否查到记录判断走展示还是提交逻辑

正确逻辑实现

首先你需要先拿到当前页面展示的书籍名称,假设存储在变量currentBookTitle中,修正后的代码如下:

// 注意用using包裹连接对象,执行完自动释放资源
using (SqlConnection ratingconn = new SqlConnection("你的数据库连接字符串"))
{
    ratingconn.Open();
    // 参数化查询避免SQL注入,同时增加书籍维度的过滤
    SqlCommand cmdCheck = ratingconn.CreateCommand();
    cmdCheck.CommandText = "SELECT bookRating FROM tbl_ratingInfo WHERE userID = @UserID AND bookTitle = @BookTitle";
    // 绑定查询参数
    cmdCheck.Parameters.AddWithValue("@UserID", Session["userID"]);
    cmdCheck.Parameters.AddWithValue("@BookTitle", currentBookTitle); // 替换为你的当前页面书籍名称变量

    SqlDataReader reader = cmdCheck.ExecuteReader();
    // 这里就是你需要的判断逻辑:reader.Read()返回true说明查到了对应记录,即用户已评分
    if (reader.Read()) 
    {
        // 已评分,禁用下拉框展示已有评分
        ddl_Rating.Enabled = false;
        ddl_Rating.Text = reader.GetInt32(0).ToString();
        reader.Close();
    }
    else
    {
        // 未评分,提交逻辑建议绑定到用户点击「提交评分」按钮的事件中,不要页面加载就直接执行插入
        reader.Close();
        // 以下是提交按钮触发时的插入逻辑
        SqlCommand cmdRating = ratingconn.CreateCommand();
        cmdRating.CommandText = "INSERT INTO tbl_ratingInfo (bookTitle, userID, bookRating) VALUES(@BookTitle, @UserID, @Rating)";
        cmdRating.Parameters.AddWithValue("@BookTitle", currentBookTitle);
        cmdRating.Parameters.AddWithValue("@UserID", Session["userID"]);
        cmdRating.Parameters.AddWithValue("@Rating", ddl_Rating.Text);
        cmdRating.ExecuteNonQuery();
        // 插入成功后禁用下拉框提示提交完成
        ddl_Rating.Enabled = false;
    }
}

额外注意事项

  • 所有数据库操作相关的连接、命令、读取器对象都建议用using包裹,自动释放资源避免内存泄漏
  • 评分表的CHECK约束目前只限制了bookRating <=5,建议补充bookRating >=1的规则,避免非法分值写入
  • 如果需要支持用户修改已有评分,可以将插入逻辑替换为MERGE语句,实现存在则更新、不存在则插入的效果

内容的提问来源于stack exchange,提问作者Ankia LeRoux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 00:39:03