我有一个访问数据库,其中有一列包含多个字符串,如下所示
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
列 - 但我想根据此列中的值过滤行,我假设我使用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 - 访问数据库查询,可以从通过“,”分隔的一组字符串中提取单个字符串
答案 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 + "%";
...