2013-07-15 4 views
1

У меня есть хранимая процедура, которая принимает 3 параметра: назовем их @a,@b,@c и все они являются необязательными.Сохраненная процедура с 2 параметрами

В хранимой процедуре они определяются с следующим порядком: @a,@b,@c

На основе моих исследований до сих пор, из кода .NET я должен быть в состоянии назвать их в любом порядке:

Например:

.Add(New OleDbParameter("@c", OleDbType.Integer, 4, ParameterDirection.Input, False, 0, 0, "c", DataRowVersion.Current, c)) 

.Add(New OleDbParameter("@a", OleDbType.Integer, 4, ParameterDirection.Input, False, 0, 0, "a", DataRowVersion.Current, a)) 

Но когда я это делаю, хранимая процедура все еще думает, что пройденное значение 1 равно а, а второе значение - c.

Что здесь не так?

+1

Используете ли вы SQL Server или некоторые другие СУБД? Вопрос помечен как «sql-server», но я смущен, потому что вижу, что вы используете объект «OleDbParameter». Если вы используете SQL Server, то вместо этого вы должны использовать оптимизированный объект 'SqlParameter'. –

+0

Это SQL Server –

+0

Да, старый код, который использует устаревшую технологию OLe DB –

ответ

5

OleDB не поддерживает именованные параметры: http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx

+0

Вместо этого используйте объекты пространства имен System.Data.SqlClient ('SqlConnection',' SqlCommand' и 'SqlParameter'). –

+1

Ahhhh. OleDB - хлам. –

+0

'OleDb' - это середина 1990-х годов, а' ADO.NET' - с 2002 года до текущего. –

1

Так что, если вы хотите использовать параметры в любом порядке, то вам нужно перейти на новую технологию доступа к данным, чем OleDb, но если вы застряли с OleDb, то вам нужно сделать правильный порядок.

Я думал, что ответа Престона хватило, но я опубликовал этот ответ. Если вы чувствуете, что это помогает больше, тогда принимайте его.