[英]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.