字段包含多个值,我只需要查询一个?
Field contains multiple values, I need to query on just one?
我有一个访问数据库,其中一列包含多个字符串,如下所示
Header
MultipleStrings
Does,Not,Query
我需要基于单个值进行查询,即如果我查询 "Does",这将提取包含 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
查询,但这似乎不起作用并且 returns 根本没有行。
更新:-
我已经按照建议尝试了以下方法:
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+"'";
使用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 + "%";
...
我有一个访问数据库,其中一列包含多个字符串,如下所示
Header
MultipleStrings
Does,Not,Query
我需要基于单个值进行查询,即如果我查询 "Does",这将提取包含 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
查询,但这似乎不起作用并且 returns 根本没有行。
更新:-
我已经按照建议尝试了以下方法:
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+"'";
使用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 + "%";
...