使用 C# 在 ASP.NET 中检查 SQL Server 表中的列值是不是为空

Posted

技术标签:

【中文标题】使用 C# 在 ASP.NET 中检查 SQL Server 表中的列值是不是为空【英文标题】:Check if column value in SQL Server table is null in ASP.NET using C#使用 C# 在 ASP.NET 中检查 SQL Server 表中的列值是否为空 【发布时间】:2021-09-28 10:05:10 【问题描述】:

我正在使用 C# 在 ASP.NET 中工作,我正在努力完成这段代码。

我的页面上会显示一个下拉列表,用户可以在该下拉列表中对页面上的图书进行评分。

首先,我想检查用户是否已经给出了评分(如果评分列有值)。

如果它没有值,则用户可以通过从下拉列表中选择来进行评分。

到目前为止,这是我的代码。我不确定在 if() 中写什么

// CRUD statement 
SqlCommand cmdCheck = ratingconn.CreateCommand();
cmdCheck.CommandText = "SELECT bookRating FROM tbl_ratingInfo WHERE userID = '" + Session["userID"] + "'";

if()

    // reading the information from the database
    SqlDataReader reader = cmdCheck.ExecuteReader();

    if (reader.Read())
    
        // setting the label text values
        ddl_BookName.Text = reader.GetInt32(0).ToString();
    

else

    // creating CRUD statement
    SqlCommand cmdRating = ratingconn.CreateCommand();
    cmdRating.CommandText = "INSERT INTO tbl_ratingInfo (bookRating) VALUES('"
                    + ddl_Rating.Text + "') WHERE userID = " + Session["userID"] + "' ";

这是我的数据库。该表是SQL代码中的交集表。

-- Create the rating info table
CREATE TABLE tbl_ratingInfo
(
    -- Add Foreign Keys from members and class tables
    bookTitle VARCHAR (100) NOT NULL REFERENCES tbl_bookInfo(bookTitle),
    userID INT NOT NULL REFERENCES tbl_userInfo(userID),
    bookRating INT NOT NULL DEFAULT 5 CHECK (bookRating <= 5),
    -- Composite Primary Key
    PRIMARY KEY (bookTitle, userID)
)
GO

【问题讨论】:

请不要使用字符串连接来创建 SQL 命令。学习和使用参数化语句。如果你不这样做,你就会让自己受到 Sql Injection 攻击。 userID = " + Session["userID"] + "' "; 这是一个明显的错字。但不要修正错字。改为阅读***.com/questions/14376473/…。 另见bobby-tables.com。此外,这两个命令可以在一批中完成,例如SELECT bookRating from tbl_ratingInfo WHERE userID = @userId; IF (@@ROWCOUNT = 0) INSERT ... 。此外,您应该使用 using 块处理连接、命令和读取器对象 你说的是什么sql注入?从会话对象?您将很快将 sql 注入放在任何地方。 SO 中有一半关于 sql 注入的帖子。 asp.net?但是您立即插入评级?在用户提交表单或触发 ajax 请求之前? 【参考方案1】:

内联查询不是好习惯。请改用存储过程。

您可以在 if 条件中使用 SqlDataReader 的 HasRows:

SqlCommand cmdCheck = ratingconn.CreateCommand();
            cmdCheck.CommandText = "SELECT bookRating FROM tbl_ratingInfo WHERE userID = '" + Session['userID'] + "'";

            //reading the information from the database
            SqlDataReader reader = cmdCheck.ExecuteReader();

            if (reader.HasRows) // true if the SqlDataReader contains one or more rows otherwise false.
            
                if (reader.Read())
                
                    // setting the label text values
                    ddl_BookName.Text = reader.GetInt32(0).ToString();
                
            
            else
            
                // creating CRUD statement
                SqlCommand cmdRating = ratingconn.CreateCommand();
                cmdRating.CommandText = "INSERT INTO tbl_ratingInfo (bookRating) VALUES('"
                                + ddl_Rating.Text + "') WHERE userID = " + Session["userID"] + "' ";
            

【讨论】:

以上是关于使用 C# 在 ASP.NET 中检查 SQL Server 表中的列值是不是为空的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 c# 在 asp.net 页面中部署或显示 s-s-rS 报告?

需要有关在 asp.net C# 中使用的 sql 连接的信息

如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中

如何在 asp.net c# 中检查病毒扫描的结果?

如何使用 C# 从 ASP.NET 中的 SQL Server 数据库中检索和显示 GridView 中的值

如何通过 C# ASP.net 从 SQL Server 中的文本框中存储日期