【问题标题】:Code working locally but not in Server, SQL and null string related代码在本地工作,但不在服务器、SQL 和空字符串相关
【发布时间】:2017-07-06 20:54:22
【问题描述】:

你好我有以下cs代码

 SqlConnection con = new SqlConnection();
        SqlCommand com = new SqlCommand();
        String comando = "";
        con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["INBIOTECAConnectionString"].ToString());
        SqlDataReader leer = null;
        String diaUltimo = "";
        String fecha = DateTime.Now.ToString("dd/MM/yyyy");

        try
        {
            con.Open();
            comando = " SELECT TOP 1 hora FROM SI_RegEntrada  WHERE nombre = '" + name + "' and dia = '"+fecha+"' ORDER BY id DESC;";
            com = new SqlCommand(comando, con);
            leer = com.ExecuteReader();
            while (leer.Read())
            {
                diaUltimo = leer[0].ToString();
            }

            if (diaUltimo.Equals(""))
            {
                return false;
            }
            else
            {
                return true;
            }



        }
        catch (Exception ex)
        {
            return true;
        }
        finally
        {
            con.Close();
            con.Dispose();
            com.Dispose();
            com = null;
            con = null;
        }

它应该很简单,它会检查今天 SI_RegEntrada 表中是否有来自任何用户(名称)的条目(fecha)。

SELECT TOP 1 hora FROM SI_RegEntrada  WHERE nombre = '" + name + "' and dia = '"+fecha+"' ORDER BY id DESC;

好的,到目前为止一切顺利,我继续阅读 var diaUltimo 上的结果。

在我的本地服务器上,如果没有结果(意味着今天,那个用户,没有与系统交互),diaUltimo 会得到 ​​p>

 diaUltimo = ""

所以我在 if/else 条件中检查是否返回真或假。 在实时服务器中,它总是落在 catch 子句上,并且总是返回 true。

我在想,也许 diaUltimo 会得到某种空值,或者某些 sql 错误。

我无法调试或与实时服务器交互。

【问题讨论】:

  • 你确定它在 if/else 或 catch 上失败了吗?
  • 如果用户没有任何交互,那么您的查询将返回 NULL,而不是空字符串,如果有帮助的话
  • 在catch中,我尝试将catch的return改为false,每次都这样做,所以100%肯定它落入catch中
  • 那么异常类型和消息是什么?
  • 知道哪一行引发异常非常重要。即使您无法调试,但您可以放置​​某种日志记录以查找引发异常的行。可能连接失败。

标签: c# sql-server


【解决方案1】:

换行

if (diaUltimo.Equals(""))
{
  return false;
}
else
{
 return true;
}

if(!String.IsNullOrEmpty(diaUltimo))
{
 return true;
}
else
{
 return false;
}

它将在检查您分配的值既不为空也不为空时发挥双重作用

【讨论】:

  • 我在想这样的事情,即使在我的本地服务器上,它也运行良好,现在我将尝试一些我没有想到的更简单的东西:if (leer.HasRows) {返回真; } 否则 { 返回错误; }
  • 就像我说的@ErickReyes,您的 SQL 返回 NULL 而不是 EMPTY 字符串和 NULL != 包括 NULL 在内的任何内容。 +1 特拉维斯。
【解决方案2】:

con.Open() 很有可能引发异常。您的代码中没有其他问题。

【讨论】:

    【解决方案3】:

    首先,将comando 的字符串内容临时替换为不依赖于您的表或行的SQL 命令...类似于:

    static string commando = "Select to_char(sysdate) from dual";
    

    这将做两件事:它将测试您的连接对象和 SQLExecute 是否都按预期工作,并且它将测试您实时数据库中日期字段的默认格式掩码。

    如果您没有得到任何结果,那么我将通过不返回 'true' 而是引发内部异常并将 ex 对象内容传递给您检查来开始诊断异常。

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 2017-10-11
      • 2011-06-28
      • 2021-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      相关资源
      最近更新 更多