LIKE表达式不适用于C#中的查询

时间:2017-06-29 08:19:48

标签: c# sql ms-access

我想搜索包含3个或更多'#'的记录。

在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 QUery显示0结果。

3 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:0)

所以Access女士使用*,但C#OleDb使用%。您可以将*替换为%

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

答案 2 :(得分: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();