2016-04-12 6 views
0

ich eine Access-Datenbank, die eine Spalte, die als mehrere Strings enthält unterFeld enthält mehrere Werte, ich muss nur einen abfragen?

Header 
MultipleStrings 
Does,Not,Query 

Ich brauche von einem einzigen Wert basiert weg IE Abfrage, wenn ich „Hat“ Abfrage diese die Zeile ziehen würde die Does enthält, Nicht, Abfrage.

Unten ist der Code habe ich versucht (Kommentar gesetzt ist, was nicht funktioniert)

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; 
} 

Grundsätzlich, ich will nicht, dass es die MultipleStrings Spalte zeigen - aber ich möchte, um die Zeilen filtern von dem Wert in dieser Spalte nahm ich an, dass ich wie eine Contains oder like Abfrage verwenden würde, aber das scheint nicht zu funktionieren und gibt überhaupt keine Zeilen zurück.

Update: -

Ich habe versucht, die folgenden gemäß Vorschläge:

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; 
} 

Dies ist immer noch eine leere Zeile mit nichts in ihm zurückkehrt.

abschließende Antwort: -

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 - Zugriff auf DB-Abfrage, die über eine einzigartige Zeichenfolge aus einer Gruppe von Zeichenketten getrennt ein ziehen kann „“

+0

Verwendung wie * ' ‚+ var +‘ * "; – LearningPhase

+0

Aber diese letzte Antwort ist völlig anfällig für SQL-Injection und Sie sollten parametrisierte Abfragen verwenden ich frage mich, wie meine vorgeschlagen parametrisierte Antwort didn‘. Ich arbeite für Sie, aber das !? Sie sind beide gleich. Es ist vielleicht wegen der '' 'um die' ''@ Search''. –

+0

@ S.Akbari Die' '' um '' Search'' musste vorhanden sein oder wenn der Code ausgeführt wird, würde der Microsoft ODBC-Parameter erwarteter Fehler auftreten, vielleicht formatiere ich es falsch, da ich ziemlich neu in C# bin und dies ist mein erstes Mal, eine Access-Datenbank abzufragen.Verwenden Sie Ihren Code in Ihrem Format nicht einmal Kompilieren Schließlich ist SQL Injection nicht etwas, woran ich mich wirklich für das im Endprodukt interessiere, ich benutze es offensichtlich für zukünftige beste pra ctice werde ich mir das merken. Die Datenbank wird auf einer Maschine sein und sie ändern nur ihre eigenen Daten. – badatseesharp

Antwort

1

Sie müssen * verwenden, die erlaubt

+0

müssen Asterisk nach wie und nach hinzufügen '' – LearningPhase

+0

Entschuldigung, aber ich verstehe nicht ganz, was du meinst, meinst du 'LIKE" * '"+ ThisVar" *' ";"? – badatseesharp

+0

Es sollte wie '% " + Ihre Variable + "% '" – LearningPhase

1

verwenden Like und vergessen Sie nicht % hinzufügen auch parameterized queries verwenden, um zu vermeiden, eine beliebige Zeichenfolge beliebiger Länge Verwendung wie ‚‚+ var +‘‘“übereinstimmen. SQL-Injektion. Wie folgt aus:

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 + "%"; 
    ... 
Verwandte Themen