使用 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 查询结果保存在数组中