繁体   English   中英

向SQL查询的WHERE子句添加参数

[英]Adding parameters to the WHERE clause of a SQL query

我正在使用ADO.NET通过ODBC连接到Oracle DB。 除了使用简单的SQL查询绑定参数外,一切都工作正常:

Connection.Open();
IDbCommand command = Connection.CreateCommand();
command.CommandText = "SELECT length FROM activity_type WHERE name = :name_of_activity";
var parameter = command.CreateParameter();
parameter.ParameterName = ":name_of_activity";
parameter.Value = "Short_break";
command.Parameters.Add(parameter);
int result = Convert.ToInt32(command.ExecuteScalar());
Connection.Close();

它总是返回0个结果( ExecuteScalar()ExecuteScalar()读取器为null)。 但是,如果我要像这样输入一个简单的SQL查询: command.CommandText = "SELECT length FROM activity_type WHERE name = 'Short_break'" ,它将像一种魅力一样工作。 而且,我在INSERT INTO子句的代码中都使用了类似的构造,而且还可以。

我想念什么吗?

OdbcCommand.Parameters的文档中:

当CommandType设置为Text时,用于ODBC的.NET Framework数据提供程序不支持将命名参数传递给SQL语句或OdbcCommand调用的存储过程。 在这两种情况下,均使用问号(?)占位符。 例如:

 SELECT * FROM Customers WHERE CustomerID = ? 

换句话说,您的代码应如下所示:

Connection.Open();
IDbCommand command = Connection.CreateCommand();
command.CommandText = "SELECT length FROM activity_type WHERE name = ?";
var parameter = command.CreateParameter();
parameter.Value = "Short_break";
command.Parameters.Add(parameter);
int result = Convert.ToInt32(command.ExecuteScalar());
Connection.Close();

(请注意,您可能应该考虑使用using语句,否则,如果引发异常,则不会关闭连接。)

根据您所描述的,问题只能存在于参数中。

也许是某种奇怪的混合,例如SQL Server上的varchar和nvarchar之间,换句话说,尝试显式设置数据类型。

尝试更改此行:

parameter.ParameterName = ":name_of_activity";

parameter.ParameterName = "name_of_activity";

换句话说,删除冒号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM