【问题标题】:How to ignore all other database parameters when retrieving one database parameter检索一个数据库参数时如何忽略所有其他数据库参数
【发布时间】:2011-10-11 14:12:52
【问题描述】:

我创建了一个简单的代码来检索数据库参数,即 ("SOPNUMBE", ordernumber) 但是,有时员工会填写错误的订单,给我一个“LIFTxxxx”值而不是“ORDxxxxx”等的 SOPNUMBE。由于 L 在 S 之前,我的 ftp 站点首先处理 LIFT,从而产生错误。我真的很想让这个应用程序忽略除“SOPNUMBE”之外的所有内容,我觉得这是一个非常简单的问题,对我来说这听起来像是一个简单的 if then 语句。但我很难措辞。任何帮助将不胜感激!

public bool UpdateOrderToShipped(string order)
{
    orderNumber = order;
    string batch = ConfigurationManager.AppSettings["SuccessfulOrderBatch"];
    string statement = "UPDATE SOP10100 SET BACHNUMB = '"+ batch +"' WHERE SOPNUMBE = @SOPNUMBE";
    SqlCommand comm = new SqlCommand(statement, connectionPCI);
    comm.Parameters.Add("SOPNUMBE", orderNumber);
    try
    {
        comm.Connection.Open();
        comm.ExecuteNonQuery();
        comm.Connection.Close();
    }
    catch(Exception e)
    {
        comm.Connection.Close();
        KaplanFTP.errorMsg = "Database error: " + e.Message;
    }
    statement = "SELECT SOPTYPE FROM SOP10100 WHERE SOPNUMBE = @SOPNUMBE";
    comm.CommandText = statement;
    SqlDataAdapter da = new SqlDataAdapter(comm);
    DataTable dt = new DataTable();
    da.Fill(dt);
    soptype = dt.Rows[0]["SOPTYPE"].ToString();



    return true;
}

【问题讨论】:

  • 抱歉,您的问题很难理解。 FTP 站点和字母顺序与此代码有什么关系?您是否只想在其中添加检查 [order] 参数的第一个字符的代码?
  • 是的,对不起,我对此很陌生。添加代码来检查 [order] 参数的第一个字符正是我想要做的。
  • 为什么用户第一次输入数据时不验证数据?如果订单号无效,则不应调用将订单号写入数据库的方法。
  • 所以用英文“如果前三个字符是“ORD”,那么就这样做,否则就这样做[???]” 如果不是这种情况,这应该怎么做?如果您对 if 语句不满意,那么您可能不应该使用此代码。你很有可能会破坏其他东西。
  • 如果前三个字符是ORD,则存储数据,如果不是,则忽略。

标签: c# mysql sql parameters


【解决方案1】:

正如我在评论中指出的那样,如果您不习惯使用 if 语句更改此代码,那么您可能不应该维护此代码。 (你知道这段代码在哪里被引用吗?你的改变会影响到那些地方。)

但是你去...

public bool UpdateOrderToShipped(string order)
{
    if ((String.CompareOrdinal(order, 0, "ORD", 0, 3) == 0)
    {
       orderNumber = order;
       string batch = ConfigurationManager.AppSettings["SuccessfulOrderBatch"];
       string statement = "UPDATE SOP10100 SET BACHNUMB = '"+ batch +"' WHERE SOPNUMBE = @SOPNUMBE";
       SqlCommand comm = new SqlCommand(statement, connectionPCI);
       comm.Parameters.Add("SOPNUMBE", orderNumber);
       try
       {
           comm.Connection.Open();
           comm.ExecuteNonQuery();
           comm.Connection.Close();
       }
       catch(Exception e)
       {
           comm.Connection.Close();
           KaplanFTP.errorMsg = "Database error: " + e.Message;
       }
       statement = "SELECT SOPTYPE FROM SOP10100 WHERE SOPNUMBE = @SOPNUMBE";
       comm.CommandText = statement;
       SqlDataAdapter da = new SqlDataAdapter(comm);
       DataTable dt = new DataTable();
       da.Fill(dt);
       soptype = dt.Rows[0]["SOPTYPE"].ToString();



       return true;
   } else
   {
      return false;
   }
 }

【讨论】:

  • 据我所知,此代码未在其他任何地方引用。感谢您的帮助,我会继续试验。
  • 如果订单字符串为空,则可以抛出NullReferenceException。编写 if 语句的另一种方法是if (String.CompareOrdinal(order, 0, "ORD", 0, 3) == 0 && order.Length > 3)。这可以防止出现异常,因为只有在前三个顺序字母为“ORD”时才会访问 Length 属性。
  • @ Joshua @ Jamie F,如果我想说“除 LIFT 之外的所有内容”而不是“仅 ORD”,那会是 (String.CompareOrdinal(order, 0, "LIFT", 0 , 4) != 0) ?
  • 是的。那会做你描述的。请记住,这些比较区分大小写。在这种情况下将处理“提升”或“提升”。
  • @JamieF - 看来 OP 明确回答了您关于您是否应该尝试帮助他/她的问题:显然,您不应该这样做。哦,好吧,生活和学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 2019-10-12
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2015-07-19
相关资源
最近更新 更多