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

How to return the null values and value within the same column by using textbox search function

只是一个简短的问题。我已经尝试了很多可能性来获取日期列中的空值和值,例如使用 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-01-30,结束日期我输入 2021-12-30。它只显示带有 Created_DateTime 的行,但当存在空值 Created_DateTime.

时则不显示

根据您的评论,您似乎总是想要return记录NULLCreated_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 注入开放。