簡體   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