gpt4 book ai didi

c# - ADO.NET 中参数化 SQL 命令的最终形式

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:34 27 4
gpt4 key购买 nike

当我通过 ADO.NET 从我的 C# 程序向 Access 发送参数化查询时出现语法错误。

我当然知道我的代码中包含了哪些 SQL 字符串,其中嵌入了参数名称。

有谁知道在我调用 cmd.ExecuteNonQuery 之后如何查看最终发送到 DBMS 的 SQL 字符串?

谢谢。

编辑:

无法在交互式调试器或 Access 日志或其他内容中看到该字符串?为了让任何人都能重现我的确切问题,他们必须拥有我的数据库,这是不会发生的。但是,由于有人对我正在尝试做的事情的细节表达了兴趣,所以我发布了以下代码片段:

  OdbcCommand cmd = new OdbcCommand();
cmd.CommandText =
@"insert into Posts (Page, Line, TimeStamp, Status) values
(@pagename, @lineno, @now, 'SAVED')";
cmd.Connection = _cn;
cmd.Transaction = transaction;
cmd.Parameters.Add(new OdbcParameter("@pagename",OdbcType.VarChar));
cmd.Parameters.Add(new OdbcParameter("@lineno",OdbcType.VarChar));
cmd.Parameters.Add(new OdbcParameter("@now",OdbcType.DateTime));
cmd.Parameters["@pagename"].Value = pageId;
cmd.Parameters["@lineno"].Value = lineId;
cmd.Parameters["@now"].Value = now;
cmd.ExecuteNonQuery();

希望对你有帮助。

再次感谢。

编辑:

我想到“TimeStamp”可能是 AccessSQL 中的保留字,这很可能是语法错误的原因。然而,即使假设这是原因,如何查看最终形式的 SQL 查询的一般问题仍然悬而未决。

最佳答案

Access 仅使用位置参数。

您需要做的就是将 SQL 更改为:

insert into Posts (Page, Line, [TimeStamp], Status) values (?, ?, ?, 'SAVED')

确保以正确的顺序将任何其他参数放入 Parameters 集合中。

编辑:已更新以解决保留字问题。

编辑:无法跟踪在 OLE DB 连接上运行的 SQL,至少目前无法跟踪。参见 this Microsoft KB article .

关于c# - ADO.NET 中参数化 SQL 命令的最终形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com