mcm*_*mil 0 c# oracle ado.net odbc
我正在使用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();
Run Code Online (Sandbox Code Playgroud)
它总是返回0结果(ExecuteScalar()来自读者的相同的null ).但是,如果我像这样简单的SQL查询:command.CommandText = "SELECT length FROM activity_type WHERE name = 'Short_break'"它会像魅力一样工作.更重要的是,我在代码的INSERT INTO句子中使用了类似的结构,并且它们没问题.
我错过了什么吗?
来自以下文档OdbcCommand.Parameters:
当CommandType设置为Text时,.NET Framework数据提供程序for ODBC不支持将命名参数传递给SQL语句或OdbcCommand调用的存储过程.在其中任何一种情况下,请使用问号(?)占位符.例如:
Run Code Online (Sandbox Code Playgroud)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();
Run Code Online (Sandbox Code Playgroud)
(您可能应该考虑使用using语句,请注意......否则如果抛出异常,您将不会关闭连接.)
| 归档时间: |
|
| 查看次数: |
4054 次 |
| 最近记录: |