字段包含多个值,我只需要查询一个值吗?

时间:2016-04-12 19:34:45

标签: c# winforms ms-access-2010

我有一个访问数据库,其中有一列包含多个字符串,如下所示

Header
MultipleStrings
Does,Not,Query

我需要根据单个值进行查询。如果我查询“是”,这将拉出包含“不,不,查询”的行。

下面是我试过的代码(注释掉的是什么不起作用)

string strCon = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\Users\mydocs\Documents\Database4.accdb;";
//string strSql = "select ID, TestField, TestField3 from Table1 where MultipleStrings like'" + ThisVar + "'";
string strSql = "Select * from Table1";

using (OdbcConnection con = new OdbcConnection(strCon))
using (OdbcDataAdapter dadapter = new OdbcDataAdapter(strSql, con))
{
    DataTable table = new DataTable();
    dadapter.Fill(table);

    this.dataGridView1.DataSource = table;
}

基本上,我不希望它显示MultipleStrings列 - 但我想根据此列中的值过滤行,我假设我使用Containslike查询,但这似乎不起作用,根本不返回任何行。

更新: -

我根据建议尝试了以下内容:

string strSql = "select * from Table1 where MultipleStrings LIKE '@Search'";
using (OdbcConnection con = new OdbcConnection(strCon))
using (OdbcDataAdapter dadapter = new OdbcDataAdapter(strSql, con))
{
    DataTable table = new DataTable();
    dadapter.SelectCommand.Parameters.Add("@Search", OleDbType.VarChar).Value = "%" + ThisVar + "%";
    dadapter.Fill(table);
    this.dataGridView1.DataSource = table;
}

这仍然是一个没有任何内容的空白行。

最终答案: -

ThisVar = "Query";
string strCon = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\Users\MyDocs\Documents\Database4.accdb;";
string strSql = "select ID,TestField,TestField3,TestCheck,TestCheck2 from Table1 where MultipleStrings LIKE '%"+ThisVar+"%'";
using (OdbcConnection con = new OdbcConnection(strCon))
using (OdbcDataAdapter dadapter = new OdbcDataAdapter(strSql, con))
{
    DataTable table = new DataTable();
    dadapter.Fill(table);
    this.dataGridView1.DataSource = table;
}

TL; DR - 访问数据库查询,可以从通过“,”分隔的一组字符串中提取单个字符串

2 个答案:

答案 0 :(得分:1)

您需要使用*,它允许匹配任何长度的任何字符串 使用类似'“+ var +”'“;

答案 1 :(得分:1)

使用Like,不要忘记添加%。还可以使用parameterized queries来避免SQL注入。像这样:

string strSql = "select * from Table1 where MultipleStrings LIKE @Search";
...
using (OdbcDataAdapter dadapter = new OdbcDataAdapter(strSql, con))
{
    dadapter.SelectCommand.Parameters.Add("@Search", OleDbType.VarChar).Value = "%" + ThisVar + "%";
    ...