Разница между ? и параметры @VarName в VB.net

Я работаю над программой vb.net для домашнего использования. Я искал и пытался понять, как лучше всего использовать параметризованные запросы. Я видел много мест, в которых упоминается @VarName, который будет использоваться как INSERT INTO people (FirstName,LastName) VALUES (@FName,@LName), где каждый из них является соответствующим параметром, но я также видел несколько мест, где говорится об использовании позиционных параметров как ?, используемых как INSERT INTO people (FirstName,LastName) VALUES (?,?), где первым параметром ? является Имя, а второй - Фамилия. Я работаю с базой данных OpenEdge Progress.

Каково соглашение для VB.net, если оно существует? В чем разница между ними?


person PsychoData    schedule 02.05.2014    source источник
comment
Это в значительной степени зависит от того, в какие системы баз данных вы отправляете свои запросы и с помощью какой технологии доступа к данным.   -  person Damien_The_Unbeliever    schedule 02.05.2014
comment
Добавлены теги для моей системы баз данных   -  person PsychoData    schedule 02.05.2014
comment
и я делаю эти запросы через ODBC   -  person PsychoData    schedule 05.05.2014


Ответы (1)


@ Параметры предназначены для собственной библиотеки SQL Server (с использованием библиотеки System.Data.SqlClient) (или эквивалентной: например, Sybase и т. д.), но ? параметры для OLEDB (System.Data.OleDb) Они не взаимозаменяемы.

person TimG    schedule 02.05.2014
comment
Я добавил, какую систему я использую. Это ни то, ни другое. - person PsychoData; 02.05.2014
comment
Скорее всего, вы используете OLEDB для подключения к источнику данных, поскольку это универсальный API для доступа к данным унифицированным способом. Если вы не используете System.Data.OleDb напрямую, я бы проверил документацию для любого используемого вами драйвера, чтобы узнать, что он рекомендует использовать. - person Steve Pettifer; 02.05.2014
comment
Я не знаком с Progress OpenEdge, но если он использует @ для параметров, то я ожидаю, что он будет аналогичным (для этого ответа): используйте параметр @ с родным драйвером или? param для драйверов OLEDB. - person TimG; 02.05.2014