C# 检查两个值C的Null或空字符串#

C# 检查两个值C的Null或空字符串#,c#,sql,C#,Sql,我想检查Subject Code和Subject Name的空字符串或空值,以便Subject Code和Subject Name的空字符串不会存储在数据库中。我是c#的新手。代码有错误。它声明无法从bool转换为字符串。我尝试了很多方法,但错误仍然存在。在修复了从bool转换为string的错误后,它返回了一个notfound错误。如何更改return NotFound()错误 public IHttpActionResult PostAddSubjectCode([FromB

我想检查Subject Code和Subject Name的空字符串或空值,以便Subject Code和Subject Name的空字符串不会存储在数据库中。我是c#的新手。代码有错误。它声明无法从bool转换为字符串。我尝试了很多方法,但错误仍然存在。在修复了从bool转换为string的错误后,它返回了一个
notfound
错误。如何更改
return NotFound()
错误

        public IHttpActionResult PostAddSubjectCode([FromBody] ConfigSubjectCode SubjectCodes)
        {

        string Subject_Code = SubjectCodes.Subject_Code;  
        string Subject_Name = SubjectCodes.Subject_Name; 
        if (String.IsNullOrEmpty(Subject_Code) && String.IsNullOrEmpty(Subject_Name))
        {
            return NotFound();
        }
        else
        {
            string sql = "INSERT INTO[dbo].[GEO_SUBJECT_CODES] ([Subject_Code],[Subject_Name_BY_CLASS]) VALUES " +
                         "('" + Subject_Code + "', '" + Subject_Name + "');";
            DBConnection dbConnection = new DBConnection();
            dBConnection.UpdateTable(sql);            
            return Ok();
        }

        }   
  • 该错误准确地说明了问题所在:您正在将一个
    布尔值(
    Subject\u code==”“&&Subject\u Name==”“
    )传递到
    字符串。IsNullOrEmpty
    需要
    字符串

  • 您正在为正在检查的变量设置空字符串,使得
    if
    检查毫无意义

  • 您的SQL是可以注入的

  • 强烈建议:,它还将链接到更新的
    核心
    示例


    我将把这个放在这里,因为我们有一个线程,并指出列出的问题

    // These will make the if statement useless, it will never hit else
    // string Subject_Code = "";
    // string Subject_Name = "";
    
    //Assumptions: Subject_Codes contians these props
    if(string.IsNullOrEmtpy(SubjectCodes.Subject_Code) && string.IsNullOrEmpty(SubjectCodes.Subject_Name)){
          // whatever you want to do...
    } else {
          //sql here - I'll skip the comments on why your sql is bad - re: use parameters
          // return after successful sql - look into a try/catch
    }
    

    相反,在您的模型中查看—您可以同时获得服务器端和客户端验证。我强烈建议您阅读大量的教程,而不是零碎的东西。

    基于上述代码,您尝试做的是将布尔值与字符串值进行比较,这会给您带来错误,请尝试下面的解决方案

      if (String.IsNullOrEmpty(Subject_Code) && String.IsNullOrEmpty(Subject_Name)){
        return NotFound();
      } else{
           try{
            //SQL Code
            } catch (Exception ex){
                   //Your Code
            }
    }
    

    注意:这是对OP问题的快速修复,而不是最佳做法。

    因为您的
    如果/else
    都返回,它将永远不会到达实际的更新代码。您将这两个变量都分配给一个固定的空字符串,这在任何情况下都不会导致
    if/else
    工作。你想要这样的东西:

        public IHttpActionResult PostAddSubjectCode([FromBody] ConfigSubjectCode SubjectCodes)
        {
    
            string Subject_Code = SubjectCodes.Subject_Code; // these can't be fixed ""
            string Subject_Name = SubjectCodes.Subject_Name; // these can't be fixed ""
            if (String.IsNullOrEmpty(Subject_Code) && String.IsNullOrEmpty(Subject_Name))
            {
                return NotFound();
            }
            else
            {
                string sql = "INSERT INTO[dbo].[GEO_SUBJECT_CODES] ([Subject_Code],[Subject_Name_BY_CLASS]) VALUES " +
                             "('" + Subject_Code + "', '" + Subject_Name + "');";
                DBConnection dBConnection = new DBConnection();
                dBConnection.UpdateTable(sql);            
                return Ok();
            }
    
        }   
    


    String.IsNullOrEmpty(aString)
    -这就是您使用它的方式。方法
    IsNullOrEmpty
    需要一个字符串作为参数,而不是布尔值,这是错误的原因。我想检查主题代码和主题名称使用
    和&
    组合您的条件。像
    String.IsNullOrEmpty(str1)和&String.IsNullOrEmpty(str2)
    。但是我认为你应该使用或代替AND,根据你的意图。我强烈建议你阅读SQL注入。并告诉我们抛出的确切错误。但是代码无法到达我的字符串sql。它声明了无法访问的代码detected@charles发布你的更新代码,它不应该。请注意,我只给了您一个片段,我已经进行了调整以使其更加清晰,是的,您的
    else
    语句
    返回
    因此您的sql是unreachable@charles这是因为您正在返回if语句的两个分支。@charles更新了一个简单的示例/指南。在克服此错误后,必须改进代码。关于如何在ASP.NET中进行正确的数据访问,有很多例子。请参见下面的我的评论,OP正在设置正在if中检查的空字符串,使其毫无意义。它将永远不会命中
    否则
    我无法使用
    使用
    。有一个错误,我假设这只是设置它的一个示例,为了代码的目的,他碰巧使用了空字符串,但实际上会从某处检索。我是不是给了怀疑太多的好处?好的。因此,您使用的任何dbConnection都不是从IDisposable派生的。。。在使用
    删除
    后,它仍然无法为catch添加主题代码和主题名称。我可以将
    抛出ex?您好@charles,请阅读您不应该推广SQL注入,最好显示OP参数化查询。@Jeremy Thompson更新。什么是OP参数化查询?