2017-06-29 68 views
-1

我想搜索具有3個或更多'#'的記錄。LIKE表達式在C#中不起作用查詢#

在MSACCESS我可以寫這一點,並告訴我的結果:

SELECT * FROM AlmLotes WHERE Lote LIKE '[#][#][#]*'; 

但在C#不工作。

DataTable dtResultats = new DataTable(); 

string strConnectionSource = MYCONNECTIONSTRING 

OleDbConnection connAccess = new OleDbConnection(strConnectionSource); 
connAccess.Open(); 

string strSQL = "SELECT * FROM AlmLotes WHERE Lote LIKE '[#][#][#]*'"; 

OleDbCommand cmd = new OleDbCommand(strSQL, connAccess); 
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(cmd); 
dtResultats = new DataTable(); 

    try 
    { 
     myDataAdapter.Fill(dtResultats); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 
    } 

    for (int i = 0; i < dtResultats.Rows.Count; i++) 
    { 
     var rows = dtResultats.Rows[i]; 
     for (int z = 0; z < dtResultats.Columns.Count; z++) 
     { 
      Console.WriteLine(dtResultats.Columns[z].ColumnName + ": " + rows[z] + Environment.NewLine); 
     } 
    } 
Console.ReadKey(); 

MSAcces中的SQL查詢向我顯示5個結果。 C#中的SQL查詢向我顯示0個結果。

+0

其他查詢在此代碼的工作非常完美。 – Tr3ndiX

+0

你查詢的字段只有'[#] [#] [#] *'還是有其他的? – Rekcs

+0

@Rekcs我想要查詢的字段如下所示:########## – Tr3ndiX

回答

0

所以Ms Access使用*,但C#OleDb使用%。您可以將*更換爲%

string strSQL = @"SELECT * FROM AlmLotes WHERE Lote LIKE '###%'"; 
+0

0結果aswell ... – Tr3ndiX

2

試試這個:

string strSQL = @"SELECT * FROM AlmLotes WHERE Lote LIKE LIKE '[[#]%'"; 
+0

相同的,0的結果。但如果我使用正常字符或數字它的工作原理,我認爲C#不理解方括號[] – Tr3ndiX

+0

爲什麼你使用方括號,而你只使用#### – Rekcs

+0

因爲德括號的含義是,我想在字面上搜索de SHARP,並在MS Access Works – Tr3ndiX

0

該解決方案是參數:

 string strSQL = "SELECT * FROM AlmLotes WHERE Lote LIKE @PARAM1"; 

     OleDbCommand cmd = new OleDbCommand(strSQL, connAccess); 
     OleDbParameter param = cmd.CreateParameter(); 
     param.DbType = DbType.String; 
     param.Direction = ParameterDirection.Input; 
     param.OleDbType = OleDbType.VarChar; 
     param.ParameterName = "PARAM1"; 
     param.Value = "###%"; 
     cmd.Parameters.Add(param); 
     OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(cmd); 
     dtResultats = new DataTable();