#c# #sql-server
#c# #sql-сервер
Вопрос:
Я использую SqlCommand
объект для чтения из / записи в мою базу данных. Я знаю, что использование SQL-команд, подобных приведенным ниже, может привести к проблемам:
Select * from myTable where tableId = '" tableID "'";
Вместо этого я использовал предпочтительный метод команд, такой как:
Select * from myTable where tableId = @Table_ID";
Затем создайте мои параметры:
sqlCommand.Parameters.Add("@Table_ID", SqlDbType.VarChar, 50).Value = tableID;
У меня есть два вопроса:
-
Важен ли порядок добавления моих параметров к
SqlCommand
объекту? -
Нужно ли мне добавлять свою
SqlCommand.CommandText
строку перед добавлением своих параметров?
Я всегда сначала добавлял свой CommandText
, а затем добавлял свои параметры в порядке их использования в строке SQL, но бывают случаи, когда я хотел бы выбрать одну из двух разных строк SQL (пример: вставить или обновить), но затем добавить все параметры после инструкции «If» вместо того, чтобы вкладывать их внутрь нее.
Комментарии:
1.
SqlCommand
основано на ADO.NET технология — и параметры SQL Server являются именованными параметрами — так что нет, последовательность, в которой вы добавляете их вSqlCommand.Parameters
коллекцию, не имеет значения. И также: инициализацияCommandText
не зависит от параметров — вы можете сделать это до или после — не имеет значения. Все это объединяется во время выполнения запроса. OleDB (для доступа, например, к MS Access с помощьюOleDbCommand
класса), однако, использует позиционные параметры , а не именованные — там важен порядок!2. Вероятно, вам следует уточнить, что ваш вопрос специфичен для SQL Server (это выглядит именно так), поскольку вопрос о порядке параметров, похоже, зависит от этого, согласно комментарию @marc_s.
3. @CoolBots: использование
SqlCommand
подразумевает, что SQL Server —SqlCommand
и связанные с ним классы являются ТОЛЬКО SQL Server ….4. @marc_s это хороший довод! В вашем комментарии упоминался Доступ, что вызвало у меня сомнения, лол. Хотя, спасибо за комментарий — я не знал,
OleDbCommand
что это только позиционные параметры.5. Также, ИМХО, при использовании хранимых процедур здесь можно перечислить много преимуществ относительно того, зачем их использовать.
Ответ №1:
-
Нет, параметры не обязательно добавлять в том порядке, в котором они отображаются в тексте, если они называются parameters
-
Нет необходимости добавлять
CommandText
вSqlCommand
перед параметрами
Ответ №2:
Вам не нужно, чтобы команда сначала инициализировалась текстом команды перед добавлением параметров.
Порядок параметров не важен, если вы используете именованные параметры, такие как @Table_ID, как вы, кажется, делаете. Порядок важен, если вы используете позиционные параметры.
Это зависит от используемого вами клиента доступа к данным.
System.Data.SqlClient: Использует именованные параметры в формате @parametername.
System.Data.OleDb: использует позиционные маркеры параметров, обозначенные вопросительным знаком (?).
System.Data.Odbc: использует позиционные маркеры параметров, обозначенные вопросительным знаком (?).
System.Data.OracleClient: Использует именованные параметры в формате:parmname (или parmname).
Да, вы можете задать текст команды условно (вставить или обновить), а затем добавить параметры вне условия.
Комментарии:
1. Почему вам нужно сначала инициализировать команду текстом command?