24

我需要从 C# 绑定 ODBC 查询的参数。这是示例代码,但 VS 告诉我缺少一个参数。

OdbcCommand cmd = conn.CreateCommand();

cmd.CommandText = "SELECT * FROM user WHERE id = @id";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();

在 ODBC 上绑定值的语法是什么?

4

3 回答 3

43

odbc 不能使用命名参数。这意味着命令字符串对每个参数都使用占位符,并且该占位符是一个问号,而不是参数名称。

OdbcCommand.Parameters

然后您需要按照它们在命令字符串中出现的相同顺序将参数添加到集合中

OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM [user] WHERE id = ?";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();

您还有另一个问题,USER 字是每个 MS Access 数据库的保留关键字,如果您想将其用作字段名或表名,则需要用方括号将每个引用括起来。如果可能的话,我强烈建议更改该表名,因为您会经常遇到这个问题。

于 2013-08-06T14:25:37.097 回答
14

如果您正在使用 ODBC,请使用"?"@

尝试执行以下操作:

OdbcCommand cmd = conn.CreateCommand();

cmd.CommandText = "SELECT * FROM user WHERE id = ?";
cmd.Parameters.Add("@id", OdbcType.Int).Value = 4;
OdbcDataReader reader = cmd.ExecuteReader();
于 2013-08-06T14:24:09.497 回答
0

要使用 ODBC 参数化 LIKE 执行如下,即您不使用典型的单引号,甚至不将 % 放在 CommandText 中(此外,我认为 %? 可能对 Oracle 有特殊含义?:

OdbcCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT * FROM [user] WHERE name LIKE ?";
cmd.Parameters.AddWithValue("@fieldName", OdbcType.NVarChar).Value = "%" + nameFilter + "%";
于 2020-02-04T15:36:57.103 回答