2

我有一个带有值的 sql 数据库。我想用我输入的值交叉检查它,如果数据库中不存在该值,程序会返回一条自定义错误消息。我该怎么做呢?

这是代码:

SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
       if (dr != null)
       {
           if (dr.Read())
           {
               var student = new StudentParticulars
              {

                  StudentName = dr.GetString(1),
                  SClass = dr.GetString(2),
                  SNRIC = dr.GetString(3),
                  FixedAmount = dr.GetDouble(4),

              };
               studentList.Add(student);
           }
           return studentList;
       }

       else
       {
           if (dr == null)
           {
               var student = new StudentParticulars
               {
                   StudentName ="",
                   SClass = "",
                   SNRIC = "0",
               };
           }
           return studentList;
       }         
  }
4

1 回答 1

0

假设您使用的是普通的 ole,ADO.NET,您有几个选项:

  1. 您可以编写带有输出参数的存储过程。然后您可以在执行查询后获取输出参数值并进行检查。如果该值不是您想要的,则抛出异常。如果您需要在数据库中运行某种复杂的过程,您可能只想这样做。

  2. 您可以简单地获取 sql 查询的值,例如:select some_value from some_table where some_condition = met。然后获取查询返回的值,如果不是您想要的,则抛出异常。我假设你想要类似的东西:select count(*) from table where column = value;

  3. 您可以在执行查询后检查数据集中的行数。如果为空,则抛出异常。

    if(dataTable.DataRows.Count == 0)
      throw new CustomException("Data not found");
    else
    {
      //process your data
      return somethingMeaninful;
    }
    

    或者,如果此方法只是用来评估值是否存在,请执行以下操作:

    if(dataTable.DataRows.Count == 0)
      return false;
    else
    {
      //process your data
      return true;
    }
    

    或使用数据阅读器

    int processedRows = 0;
    
    while(reader.Read())
    {
      //do something with the data.
      processedRows++;
    }
    
    if(processedRows == 0)
      throw new CustomException("The result set was empty");
    

    为简单起见,我这里没有添加连接处理,但是你需要在一个块中关闭连接finally,或者在一个块中使用连接using

于 2013-06-25T02:10:57.000 回答