如何使用文本框搜索功能返回同一列中的空值和值

Posted

技术标签:

【中文标题】如何使用文本框搜索功能返回同一列中的空值和值【英文标题】:How to return the null values and value within the same column by using textbox search function 【发布时间】:2021-11-24 13:09:11 【问题描述】:

只是一个简单的问题。我已经尝试了很多可能性来获取日期列中的空值和值,例如使用 ISNULL、NULL、0,但返回 0 结果。我不知道如何编程以从创建日期获取空值。

protected void Page_Load(object sender, EventArgs e)

    if (!this.IsPostBack)
    
        FillDates();
    


private void FillDates()

    txtDateS.Text = DateTime.Now.ToString("01-01-yyyy");
    txtDateE.Text = DateTime.Now.ToString("12-31-yyyy");


private string ConvertDate(Object obj)

    if (obj is DateTime)
    
         return ((DateTime)obj).ToString("dd-MM-yyyy");
    
    else
    
        return obj.ToString();
    


protected void AddRowItem(StringBuilder sb, SqlDataReader reader, int index)

    sb.Append("<tr><td>").Append(index).Append("</td>");
    sb.Append("<td>").Append(ConvertDate(reader[0])).Append("</td>");

    sb.Append("</tr>");
   

protected int DoItemList(SqlConnection connection, StringBuilder sb, string DateS, string DateE, string filter)

    string sql = "";
    SqlCommand readCommand = null;
    SqlDataReader reader = null;
    int count = 0;

    try
    
        string itemFilter = DoFilter(filter);

        sql = "SELECT v.[Code] FROM [CAS].[dbo].[Van] v WHERE v.[Created_DateTime]>='" + DateStart + "' and b.[Created_DateTime]<='" + DateEnd + "';

        readCommand = new SqlCommand(sql, connection);
        reader = readCommand.ExecuteReader();

        while (reader.Read())
        
            count++;
            AddRowItem(sb, reader, count);
        

        reader.Close(); 
    
    catch (Exception e)
    
       //
    
    return count;

我要在文本框中键入的网站

<div>
      <asp:Label id="Label1" runat="server" Width="100px">Date From:</asp:Label>
      <asp:TextBox id="txtDateS" runat="server" Width="184px"></asp:TextBox><br />
      <br/>
      <asp:Label id="Label2" runat="server" Width="100px">Creation date from:</asp:Label>
      <asp:TextBox id="txtDateE" runat="server" Width="184px"></asp:TextBox><br />
  
      <asp:Button id="cmdRun" runat="server" Width="91px" Height="24px" Text="Run" onclick="cmdRun_Click"></asp:Button>
      <asp:Label id="lblStatus" runat="server"></asp:Label>
      <hr noshade>
</div>

结果输出

Code Creation date
A0001 2018-08-12
A0002 null

为了进一步说明,Created_DateTime 可以有空值。因此,当我使用文本框按 Created_DateTime 过滤时,它只显示 Created_DateTime 不为空的值。例如。对于开始日期,我键入 2021 年 1 月 30 日,结束日期我键入 2021 年 12 月 30 日。它只显示具有 Created_DateTime 的行,但不显示空值 Created_DateTime。

【问题讨论】:

您可以考虑向我们提供足够的信息来理解您的意思……这个空值在哪里?你想要的行为是什么?您需要解决方案是在 SQL 还是 C# 中? 仅供参考,您应该使用SqlParameters 将您的日期传递给您的查询,因为您对 SQL 注入非常开放。 尝试猜测您可能会问什么,我想我们需要查看AddRowItem 的代码。 三部分名称是一个坏习惯。想象一下,您更改连接字符串以使用不同的数据库。但是您的所有查询仍将访问 CAS 数据库!这会导致疯狂。 谢谢你们。我不能在这里粘贴代码,因为太长了。顺便说一句,我想要的数据是同时显示空创建日期和创建日期。例如。我在文本框中键入开始日期和结束日期并显示创建日期数据,但不幸的是,它没有显示来自服务器 sql 的空值行。我想要的结果是显示创建日期为空的数据,并且数据将值创建日期。希望它可以澄清你的问题 【参考方案1】:

根据您的 cmets,您似乎总是希望返回带有 NULL Created_DateTime 的记录。在这种情况下,您就是这样做的。

SELECT v.Code
FROM dbo.Van v
WHERE (
    v.Created_DateTime >= @DateStart
    -- When dealing with dates that are stored as datetime and could therefore have an accidental time component
    -- its safer to use less than a day in the future
    AND v.Created_DateTime < DATEADD(DAY, 1, CONVERT(DATE,@DateEnd))
)
OR v.Created_DateTime IS NULL;

注意我正在向您展示您应该使用的查询,它使用参数而不是字符串连接。因为字符串连接让您对 SQL 注入开放。

【讨论】:

问题已解决。非常感谢。我只是错过了 WHERE 查询中的“OR IS NULL”。谢谢你。你拯救了我的一天 我会改成SQL注入。谢谢你的建议和建议。祝你有美好的一天

以上是关于如何使用文本框搜索功能返回同一列中的空值和值的主要内容,如果未能解决你的问题,请参考以下文章

Python,如何使用字典填充数据框中的空值

从 Pyspark 中的数据框中计算空值和非空值

Pyspark - 计算每个数据框列中的空值数量

Apache Spark:如何使用 Java 在 dataFrame 中的空值列中插入数据

仅计算两个不同列中的空值并显示在一个选择语句中

如何从列类型列表中删除 pandas DataFrame 中的空值