2015-10-01 3 views
1

Я застрял в этой проблеме некоторое время и прошел несколько учебников без успеха.Как создать параметризованный запрос?

Как вы используете параметризованные запросы в C# с Oracle.ManagedDataAccess.dll, а не старыми Oracle.DataAccess.dll?

Код я попытался это:

string query = @"SELECT Count(*) FROM @table WHERE @custNM = '@nm'"; 

OracleCommand mySearch = new OracleCommand(query, newConn); 
mySearch.Prepare(); 

mySearch.Parameters.Add("@table", "cust"); 
mySearch.Parameters.Add("@custNM", "nm"); 
mySearch.Parameters.Add("@nm", "SAM"); 

Я также попробовал без раздела и остроумием mySearch.Prepare: вместо @ и без @ префиксов строки запроса. Еще одна вещь, которую я пробовал, заключалась в удалении @/: в начале строки Add, например.

mySearch.Parameters.Add("nm", "SAM"); 

Моя конечная цель состоит в том, чтобы использовать переменные для передачи значений вместо простого строкового текста для оператора, если это проще сделать.

+1

идентификаторы объектов не могут быть использованы в качестве PARAMATERS –

+0

Другим распространенным «Гоча», чтобы быть в курсе, что ODP.NET по умолчанию «привязывать положением» означает, что он делает не заботятся о том, какие имена вы используете для параметров, только заботится, в каком порядке вы их «добавляете». Если вы хотите вместо bindbyname, для этого есть свойство. –

ответ

3

Во-первых, вы должны использовать : в качестве идентификатора параметра вместо @, который обычно используется SQL Server.

Во-вторых, вы не можете указать имя таблицы или имена полей, используя параметры. Он должен быть либо жестко закодирован, либо написан с использованием динамического SQL.

В-третьих, вы не должны избегать параметров. Им это не нужно.

Самое лучшее, что можно сейчас это:

string query = @"SELECT Count(*) FROM cust WHERE nm = :nm"; 

OracleCommand mySearch = new OracleCommand(query, newConn); 
mySearch.Parameters.Add(":nm", "SAM"); 
+0

Что касается вашего первого предложения, это ':' просто просто «путь Oracle», или есть реальная разница? – sab669

+0

Просто путь Oracle. Дело в том, что он ничего не понимает ... –

Смежные вопросы