C# 使用 sql LIKE 过滤 datagridview 日期时间字段

标签 c# mysql .net datetime datagridview

当我尝试从 datagridview 过滤数据时遇到问题。我尝试使用 LIKE% 通配符过滤 datetime 字段。当我像这样 12-01 那样在 textBoxEdit 中分配值或只是输入 1 时,得到:

enter image description here

我是否没有对该查询字符串进行格式化和转义,或者无法将整数值分配给通配符?或者可能是此语法错误的任何其他原因。

另一个查询工作正常,只是在这里我遇到问题:

sql = "SELECT * FROM grupe_artikala WHERE  CONVERT(VARCHAR, created, 120) LIKE '" + searchTextBoxNaziv.Text + "%'";

检查我的完整代码:

 private void searchTextBoxNaziv_TextChanged(object sender, EventArgs e)
 {
            String selectedColumn = filterSearchCombo.Text;
            String sql = "";

            if(selectedColumn == "ID" && searchTextBoxNaziv.Text is string)
            {
                sql = "SELECT * FROM grupe_artikala WHERE id LIKE '%" + searchTextBoxNaziv.Text + "%'";
            }
            else if(selectedColumn == "Name")
            {
                sql = "SELECT * FROM grupe_artikala WHERE nameLIKE '%" + searchTextBoxNaziv.Text + "%'";
            }
            else if (selectedColumn == "Descr")
            {
                sql = "SELECT * FROM grupe_artikala WHERE desc LIKE '%" + searchTextBoxNaziv.Text + "%'";
            }
            else if (selectedColumn == "Created")
            {
                sql = "SELECT * FROM grupe_artikala WHERE  CONVERT(VARCHAR, created, 120) LIKE '" + searchTextBoxNaziv.Text + "%'";

            }

            else
            {
                sql = "SELECT * FROM grupe_artikala";
            }

            GetData(sql);
}

更新:

private void GetData(string sql)
        {
            using (conn = new MySqlConnection(Properties.Settings.Default.ConnectionString))
            {
                try
                {
                    conn.Open();

                    adapter = new MySqlDataAdapter(sql, conn);

                    dt = new DataTable();
                    bs = new BindingSource();

                    adapter.Fill(dt);

                    bs = new BindingSource();
                    bs.DataSource = dt;

                    dataGridView1.DataSource = bs;
                    bindingNavigator1.BindingSource = bs;
                }
                catch (MySqlException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

最佳答案

您不需要将日期转换为 varchar

SELECT * FROM grupe_artikala WHERE  CONVERT(VARCHAR, created, 120) LIKE '" + searchTextBoxNaziv.Text + "%'

改为使用下面的查询

SELECT * FROM grupe_artikala WHERE  created LIKE '" + searchTextBoxNaziv.Text + "%'

它会简单地根据where条件搜索数据。

关于C# 使用 sql LIKE 过滤 datagridview 日期时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39249829/

相关文章:

c# - UWP:如何删除代码中的绑定(bind)?

c# - 调度任务与任务创建

php - 加载页面时间过长 - 分析系统

php - where 子句中的列不明确 - 这是什么意思?

java - 确定 CORBA 连接的远程端口

c# - 如何以编程方式在 Xamarin 中嵌入 View ?

PHP/MySQL 数组排除

.net - 线程安全的一次计算最佳实践

c# - 什么是 (fnptr)* 类型以及如何创建它?

c# - 如何使用 C# 保留关键字作为不带 @ 前缀的属性名称?