C# 检查值是否存在或为空

C# 检查值是否存在或为空,c#,C#,一个问题…我在下面的例子中有一个代码…我必须在数据库中插入一些值..但直接从数据行..我不想使用变量。所以我的问题是,有没有办法检查数据行中的值是否存在或是否为null,如果值不存在,我必须插入null,或者如果为null,只需插入null 例如: myQuery = " INSERT INTO AGR3PL_CS (IDOC_NUM, PSEG_NUM, SEG_NUM, COMP01, GLNO01, NAME01) " + " VALUES (" + Lidoc_num

一个问题…我在下面的例子中有一个代码…我必须在数据库中插入一些值..但直接从数据行..我不想使用变量。所以我的问题是,有没有办法检查数据行中的值是否存在或是否为null,如果值不存在,我必须插入null,或者如果为null,只需插入null

例如:

myQuery = " INSERT INTO AGR3PL_CS (IDOC_NUM, PSEG_NUM, SEG_NUM, COMP01, GLNO01, NAME01) " +
          " VALUES (" + Lidoc_num + ", '" +
                        PSEG_NUM + "','" +
                        SEG_NUM + "','" +
                        dr_art_custsuply["Id"] + "','" +
                        dr_art_custsuply["GLN"] + "','" +
                        dr_art_custsuply["Name"] + "')";
这是我不想用的方式

if (!dr_art_custsuply.Table.Columns.Contains("GLN") || dr_art_custsuply["GLN"].ToString().Length <= 0)
{
    gln = "";
}
else
{
    gln = dr_art_custsuply["GLN"].ToString();
}
if(!dr_art_custsuply.Table.Columns.Contains(“GLN”)| | dr_art_custsuply[“GLN”].ToString()。长度只需执行

Convert.ToString(dr_art_custsuply["GLN"])
如果它有值,则将发送该值。否则,null将作为
Convert.ToString()
处理null

注意:不要执行
.ToString()
,因为当值为null时,它会给出异常。
读一下这个

  • 参数
  • DBNull.Value
  • 例如(因为您使用的是oracle):

    或者,如果您希望通过“dapper”获得帮助(因为您提到了参数的数量是一个问题):

    切勿将值插入SQL,请改用参数/绑定变量:

    using Oracle.DataAccess.Client; // <- In case of using Oracle 
    

    使用Oracle.DataAccess.Client;//您可以这样做(并将其用于大多数预期类型):


    使用内联三元运算符:

     gln = (!dr_art_custsuply.Table.Columns.Contains("GLN") || dr_art_custsuply["GLN"].ToString().Length <= 0 ?  string.Empty : dr_art_custsuply["GLN"].ToString());
    
    编辑:回答评论中的问题:

    myQuery = " INSERT INTO AGR3PL_CS (IDOC_NUM, PSEG_NUM, SEG_NUM, COMP01, GLNO01, NAME01) " +
              " VALUES (" + Lidoc_num + ", '" +
                            PSEG_NUM + "','" +
                            SEG_NUM + "','" +
                            dr_art_custsuply["Id"] + "','" +
                            (!dr_art_custsuply.Table.Columns.Contains("GLN") || dr_art_custsuply["GLN"].ToString().Length <= 0 ? 0 : dr_art_custsuply["GLN"].ToString()) + "','" +
                            (!dr_art_custsuply.Table.Columns.Contains("Name") || dr_art_custsuply["Name"].ToString().Length <= 0 ? String.Empty : dr_art_custsuply["Name"].ToString()) + "')";
    
    myQuery=“插入AGR3PL\u CS(IDOC\u NUM、PSEG\u NUM、SEG\u NUM、COMP01、GLNO01、NAME01)”+
    “值(“+Lidoc_num+”,”+
    PSEG_NUM+“,”+
    SEG_NUM+“,”+
    art_custsuply博士[“Id”]+“,”+
    
    (!dr_art_custsuply.Table.Columns.Contains(“GLN”)| | dr_art_custsuply[“GLN”])ToString().Length永远不要写这样的查询,请改用它。我知道这不是正确的方法。但在其他“插入”中命令我有50个参数要插入…@CrBruno参数的数量到底有什么区别?有一些工具可以帮助实现这一点,尽管-dapper使参数化变得非常简单。如果有什么区别的话,有50个参数而不是6个参数,只意味着有8倍多的理由来正确地做这件事,还有8倍多的方法来实现如果你不这样做,有人会破坏你的系统。即使忽略恶意用户,
    dr_art_custsuply[“Name”]
    包含单引号(例如,一个名为O'Malley's Green Paint的艺术品供应商)是否不合理?不,存储转义不是解决此问题的正确方法。谢谢..我使用Oracle data Basehy Marc..上面带有cmd.参数的示例很有魅力..所以如果我想使udate与insert相同?@CrBruno是的,basically我尝试了这个示例,它很好,但是如果某些值必须是数字,比如我想为GLN插入0,该怎么办和空字符串作为名称,如何编写它?谢谢@CrBruno!很高兴它这么做:)嗨Diana,一个问题?如何在这个例子中使用内联三元运算符,我不想在插入过程中使用变量,但我在代码中有一些转换…如果(!dr_art_line.Table.Columns.Contains(“weightseunit”)| dr|u art_line[“weightseunit”]。ToString().Length
    WeightIssueUnit=(!dr_art_line.Table.Columns.Contains(“WeightIssueUnit”)| | dr_art_line[“WeightIssueUnit”].ToString().Length谢谢…我会试试…:-)哦,还有一个…在我插入数据库的过程中,我有这个WeightIssueUnit.ToString()。替换(“,”,“,”),这也可以像上面的例子一样合并吗?:-)
    
    String myQuery = 
     @"insert into AGR3PL_CS(
         IDOC_NUM, 
         PSEG_NUM, 
         SEG_NUM, 
         COMP01, 
         GLNO01, 
         NAME01)
       values (
         :PRM_IDOC_NUM, -- <- Assuming that you use Oracle; @PRM_IDOC_NUM for MS SQL
         :PRM_PSEG_NUM, 
         :PRM_SEG_NUM, 
         :PRM_COMP01, 
         :PRM_GLNO01, 
         "PRM_NAME01)"; 
    
      ....
    
      using(OracleCommand cmd = new OracleCommand()) {
        ...
        cmd.CommandText = myQuery;
    
        // For MS SQL use
        // cmd.Parameters.AddWithValue("@PRM_IDOC_NUM", Lidoc_num); 
        cmd.Parameters.Add(":PRM_IDOC_NUM", Lidoc_num);
        cmd.Parameters.Add(":PRM_PSEG_NUM", PSEG_NUM);
        cmd.Parameters.Add(":PRM_SEG_NUM", SEG_NUM);
        cmd.Parameters.Add(":PRM_COMP01", dr_art_custsuply["Id"]);
        cmd.Parameters.Add(":PRM_GLNO01", dr_art_custsuply["GLN"]);
        cmd.Parameters.Add(":PRM_NAME01", dr_art_custsuply["Name"]);
    
        cmd.ExecuteNonQuery();
      }
    
    var customerId = (CheckNull(dr_art_custsuply["Id"], String.Empty)).ToString();
    
    
    public static object CheckNull(object value, object defaultValue)
    {
         return ((value == null || value == DBNull.Value) ? defaultValue : value);
    }
    
     gln = (!dr_art_custsuply.Table.Columns.Contains("GLN") || dr_art_custsuply["GLN"].ToString().Length <= 0 ?  string.Empty : dr_art_custsuply["GLN"].ToString());
    
    myQuery = " INSERT INTO AGR3PL_CS (IDOC_NUM, PSEG_NUM, SEG_NUM, COMP01, GLNO01, NAME01) " +
              " VALUES (" + Lidoc_num + ", '" +
                            PSEG_NUM + "','" +
                            SEG_NUM + "','" +
                            dr_art_custsuply["Id"] + "','" +
                            (!dr_art_custsuply.Table.Columns.Contains("GLN") || dr_art_custsuply["GLN"].ToString().Length <= 0 ?  string.Empty : dr_art_custsuply["GLN"].ToString()) + "','" +
                            dr_art_custsuply["Name"] + "')";
    
    myQuery = " INSERT INTO AGR3PL_CS (IDOC_NUM, PSEG_NUM, SEG_NUM, COMP01, GLNO01, NAME01) " +
              " VALUES (" + Lidoc_num + ", '" +
                            PSEG_NUM + "','" +
                            SEG_NUM + "','" +
                            dr_art_custsuply["Id"] + "','" +
                            (!dr_art_custsuply.Table.Columns.Contains("GLN") || dr_art_custsuply["GLN"].ToString().Length <= 0 ? 0 : dr_art_custsuply["GLN"].ToString()) + "','" +
                            (!dr_art_custsuply.Table.Columns.Contains("Name") || dr_art_custsuply["Name"].ToString().Length <= 0 ? String.Empty : dr_art_custsuply["Name"].ToString()) + "')";