Mysql 如何检查数据库中的空值
我在asp.net工作。我想,如果用户没有上传他的个人资料图片,那么他应该被重定向到“个人资料图片上传页面”。为此,我们必须检查数据库,查看该用户的Mysql 如何检查数据库中的空值,mysql,asp.net,Mysql,Asp.net,我在asp.net工作。我想,如果用户没有上传他的个人资料图片,那么他应该被重定向到“个人资料图片上传页面”。为此,我们必须检查数据库,查看该用户的user\u ID是否存在。如果数据库中不存在,则表示他尚未上传。否则,这意味着他已经上传了一张图片,页面将加载用户的所有信息。我有一个用于保存显示图片的表格: 表:ProfilePic Columns= ID DP User_ID 为了检查数据库中是否存在他的用户id,我使用以下代码: str = "select * from
user\u ID
是否存在。如果数据库中不存在,则表示他尚未上传。否则,这意味着他已经上传了一张图片,页面将加载用户的所有信息。我有一个用于保存显示图片的表格:
表:ProfilePic
Columns= ID DP User_ID
为了检查数据库中是否存在他的用户id,我使用以下代码:
str = "select * from ProfilePic where Profile_ID=" + userid + ";";
cmd = new SqlCommand(str, con);
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
if (reader["Profile_ID"] != DBNull.Value)
{
LoadInfo();
LoadData();
}
else
{
Response.Redirect("DP.aspx");
}
但它仍然在说“当没有数据存在时,无效的读取尝试”。
如何解决此问题?您可以检查读卡器中的行,如以下示例所示:
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
您会说,“如果该用户的用户ID在数据库中不存在,则表示该用户尚未上传。”这意味着当您运行查询时,它将返回一条记录,或者不会返回。否则,在其中一个字段中查找空值注定会失败
我从Bjorn的回答中看到SqlDataReader有一个HasRows属性。使用它 首先,避免:
Select * ...
当您只想检查特定表中是否存在特定值时。它对你想要的东西没有任何好处,从性能的角度来看也不好
现在,来回答您的问题,select*from
没有任何用处。您只需要知道表中是否存在用户ID。你看,这是一个真实或错误的场景。您的查询也应该设计为反映这一点。因此,从本质上讲,查询本身应该返回true或false,并在此基础上应用业务规则。您还可以使用justSELECT COUNT()
。因此,我建议您采用以下方式设计查询:
string str = "SELECT CAST(COUNT(Profile_Id) AS bit) As 'DoesUserIDexist' FROM ProfilePic WHERE Profile_Id = 4";
您还可以利用:
string str = "SELECT COUNT(Profile_Id) As 'DoesUserIDexist' FROM ProfilePic WHERE Profile_Id = 4";
另外,当您需要从数据库中读取数据时,使用try-catch始终是一个很好的实践
基本上,您的代码可以简化为:
string query = "SELECT CAST(COUNT(Profile_Id) AS bit) As 'DoesUserIDexist' FROM ProfilePic WHERE Profile_Id = 4";
cmd = new SqlCommand(query, con);
try
{
SqlDataReader reader = command.ExecuteReader();
if (reader.Read())
{
LoadInfo();
LoadData();
}
else
{
Response.Redirect("DP.aspx");
}
}
catch
{
//Your exception handling mechanism here
}
finally
{
//Dispose your ADO.NET related objects here
}
是否为空
这是个问题。我同意乔德雷尔的观点。此外,没有sauch作为“空值”的东西。如果为空,则没有值。同意您的逻辑是的,您理解正确。好的,我将尝试你的建议+1来解释,尽管我希望你能用更详细的答案来指导操作,包括最佳实践!!