【问题标题】:Replacing placeholders in prepared statement OleDbCommand.Parameters替换准备好的语句 OleDbCommand.Parameters 中的占位符
【发布时间】:2021-02-21 15:10:59
【问题描述】:

我正在尝试通过准备好的语句从控制台应用程序对我的 MS Access DB 执行简单查询。

查询尝试在“targa”字段或“auto”字段中查找所需值,以简化用户界面,仅使用一个研究标签。

//grab field from GUI
string ricerca = Ricerca.Text;
string queryTarga = "SELECT * FROM [Codici] WHERE targa = ? OR auto LIKE '%?%'";
command = new OleDbCommand(queryTarga, con);


command.Parameters.Add("@p1", OleDbType.VarChar,ricerca.Length,"targa").Value = ricerca;
command.Parameters.Add("@p2", OleDbType.VarChar, ricerca.Length,"auto").Value = ricerca;

如果我为第一个字段“targa”插入一个已知值,则查找不会出现任何问题。 如果我为“auto”插入任何内容,则查找永远不会返回任何值!

问题是 '%?%' 由于单引号而被以一种奇怪的方式解释,并且它没有正确识别和设置参数。通过在查询字符串中硬编码“ricerca”变量(不使用'?')它工作得很好:

string queryTarga = "SELECT * FROM [Codici] WHERE targa = ? OR auto LIKE '%" + ricerca + "%'";

有人知道如何设置参数吗?

【问题讨论】:

  • LIKE '%' + ? +'%' 也许?

标签: c# ms-access-2010 prepared-statement oledb sql-like


【解决方案1】:

试试这个:

string queryTarga = "SELECT * FROM [Codici] WHERE targa = ? OR auto LIKE @p1";

command = new OleDbCommand(queryTarga, con);
 command.Parameters.AddWithValue("@p1", "%" + Ricerca.Text + "%");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-23
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多