如何将准备好的语句与 OleDbDataAdapter 一起使用?

Posted

技术标签:

【中文标题】如何将准备好的语句与 OleDbDataAdapter 一起使用?【英文标题】:How do I use prepared statements with an OleDbDataAdapter? 【发布时间】:2020-09-30 22:03:54 【问题描述】:

我正在编写一个 API,它将在给定特定参数的情况下查询数据库。其中一些参数将由调用应用程序提供(应该是值得信赖的),但其中一些参数将由用户输入提供。

如果我得到少量结果,我通常会使用 OleDbCommand 并通过 Parameters 字段使用准备好的语句,如此处所示

string sql = "Select * from [Table1] where Empid = ?";
OleDbCommand cmd = new OleDbCommand(sql, conn);
OleDbParameter tableParam = new OleDbParameter("@fieldvalue", value);
cmd.Parameters.Add(tableParam);
cmd.Prepare();

但是,由于我可能会得到很多结果(可能是表的全部内容),我想使用 OleDbDataAdapter 来填充 DataTable 以更方便地处理和返回数据:

DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter(sql, connstring);
da.Fill(dt);

问题是我不知道如何将准备好的语句与 OleDbDataAdapter 一起使用。我该怎么做,或者在使用 OleDbDataAdapter 时是否有其他方法可以保证数据库安全?

【问题讨论】:

DataAdapter 可以将 Command 对象作为参数。所以... new OleDbDataAdapter(cmd); 不应使用 OleDb 提供程序 【参考方案1】:

OleDbDataAdapter 公开适配器使用您的查询文本构建的 SelectCommand 属性(一个 OleDbCommand)。您可以使用它来“准备” OleDbDataAdapter 使用的命令,提供命令文本所需的参数。

DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter(sql, connstring);
da.SelectCommand.Parameters.Add("@fieldvalue", OleDbType.Integer).Value = value;
da.Fill(dt);

【讨论】:

以上是关于如何将准备好的语句与 OleDbDataAdapter 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 MySQLi 准备好的语句与存储过程一起使用

如何在mysqli准备好的语句中使用SQL LIKE子句[重复]

准备好的语句如何与 Apache DBUtils 一起使用?

如何查看准备好的语句的内容?

如何将 ascii 流绑定到准备好的语句

如何将此代码转换为准备好的语句或 jdbc 中的语句? [关闭]