如何通过ODBC C#绑定参数?

时间:2013-08-06 14:21:16

标签: c# parameters odbc

我需要在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上绑定值的语法是什么?

3 个答案:

答案 0 :(得分:34)

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数据库的保留关键字,如果您想将其用作字段名称或表名,则需要用方括号括起每个引用。如果可能的话,我强烈建议更改该表名,因为你会经常遇到这个问题。

答案 1 :(得分:11)

如果您使用的是ODBC,请使用"?"代替@

尝试按以下步骤操作:

OdbcCommand cmd = conn.CreateCommand();

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

答案 2 :(得分: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 + "%";