Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何检查数据库中的空值_Mysql_Asp.net - Fatal编程技术网

Mysql 如何检查数据库中的空值

Mysql 如何检查数据库中的空值,mysql,asp.net,Mysql,Asp.net,我在asp.net工作。我想,如果用户没有上传他的个人资料图片,那么他应该被重定向到“个人资料图片上传页面”。为此,我们必须检查数据库,查看该用户的user\u ID是否存在。如果数据库中不存在,则表示他尚未上传。否则,这意味着他已经上传了一张图片,页面将加载用户的所有信息。我有一个用于保存显示图片的表格: 表:ProfilePic Columns= ID DP User_ID 为了检查数据库中是否存在他的用户id,我使用以下代码: str = "select * from

我在asp.net工作。我想,如果用户没有上传他的个人资料图片,那么他应该被重定向到“个人资料图片上传页面”。为此,我们必须检查数据库,查看该用户的
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,并在此基础上应用业务规则。您还可以使用just
SELECT 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来解释,尽管我希望你能用更详细的答案来指导操作,包括最佳实践!!