我想搜索包含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结果。
答案 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();