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

C# 字段包含多个值,我只需要查询一个?,c#,winforms,ms-access-2010,C#,Winforms,Ms Access 2010,我有一个access数据库,其中有一列包含多个字符串,如下所示 Header MultipleStrings Does,Not,Query 我需要基于单个值进行查询,即如果我查询了,这将提取包含Does、Not查询的行 下面是我试过的代码,注释了不起作用的地方 string strCon = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\Users\mydocs\Documents\Database4.accdb;"; /

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

Header
MultipleStrings
Does,Not,Query
我需要基于单个值进行查询,即如果我查询了,这将提取包含Does、Not查询的行

下面是我试过的代码,注释了不起作用的地方

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列,但我想根据该列中的值过滤行,我假设我会使用像Contains或like查询一样的方法,但是这似乎不起作用,并且根本不返回行

更新:-

根据建议,我尝试了以下方法:

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-Access DB查询,可以从通过*分隔的一组字符串中提取单个字符串。您需要使用*来匹配任意长度的字符串
使用“+var+”

您需要使用*来匹配任何长度的字符串 使用“+var+”

使用Like,不要忘记添加%。也可用于避免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 + "%";
    ...
使用Like,不要忘记添加%。也可用于避免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 + "%";
    ...

使用“+var+”;但这个最终答案完全容易受到SQL注入的影响,您应该使用参数化查询。我想知道我建议的参数化答案怎么对你不起作用,但是这个!?它们都是一样的。这可能是因为'around the`@Search'.@S.Akbari'around'@Search'必须存在,或者在执行代码时会出现microsoft ODBC参数预期错误,可能是我格式化错误,因为我对C比较陌生,这是我第一次尝试查询Access数据库。以您的格式使用您的代码甚至不会编译。最后,SQL注入并不是我真正关心的东西,在我使用它的最终产品中,很明显,在未来的最佳实践中,我将牢记这一点。数据库将在一台机器上,他们只更改自己的数据;但这个最终答案完全容易受到SQL注入的影响,您应该使用参数化查询。我想知道我建议的参数化答案怎么对你不起作用,但是这个!?它们都是一样的。这可能是因为'around the`@Search'.@S.Akbari'around'@Search'必须存在,或者在执行代码时会出现microsoft ODBC参数预期错误,可能是我格式化错误,因为我对C比较陌生,这是我第一次尝试查询Access数据库。以您的格式使用您的代码甚至不会编译。最后,SQL注入并不是我真正关心的东西,在我使用它的最终产品中,很明显,在未来的最佳实践中,我将牢记这一点。数据库将在一台机器上,他们只更改自己的数据。需要在like和“抱歉,但我不太明白”之后添加星号,你是说like*'+ThisVar*'?它应该像“%+您的变量+%”字符串strSql=从表1中选择ID、TestField、TestField3、TestCheck、TestCheck2,其中的多字符串像“%+ThisVar+%”;这很有效,非常感谢much@badatseesharpWelcome需要在like和“抱歉,但我不太明白你的意思”后面加上星号,你是说like*“+ThisVar*”?它应该像“%+您的变量+%”字符串strSql=从表1中选择ID、TestField、TestField3、TestCheck、TestCheck2,其中的多字符串像“%+ThisVar+%”;这很有效,非常感谢much@badatseesharp欢迎