Окончательная форма параметрических команд SQL в ADO.NET - PullRequest
2 голосов
/ 28 апреля 2010

Я получаю синтаксическую ошибку при отправке параметризованного запроса в Access из моей программы на C # через ADO.NET.

Я, конечно, знаю, какую строку SQL я включил в свой код, с именами параметров, встроенными внутрь.

Кто-нибудь знает, как я могу посмотреть на строку SQL, которая, наконец, отправляется в СУБД после вызова cmd.ExecuteNonQuery?

Спасибо.

EDIT:

Нет способа увидеть эту строку в интерактивном отладчике или в журнале доступа или что-то еще? Для того, чтобы кто-нибудь мог воспроизвести мою точную проблему, у него должна была быть моя база данных, чего не произойдет. Однако, поскольку был проявлен интерес к деталям того, что я пытаюсь сделать, я публикую следующий фрагмент кода:

  OdbcCommand cmd = new OdbcCommand();
  cmd.CommandText = 
     @"insert into Posts (Page, Line, TimeStamp, Status) values
           (@pagename, @lineno, @now, 'SAVED')";
  cmd.Connection = _cn;
  cmd.Transaction = transaction;
  cmd.Parameters.Add(new OdbcParameter("@pagename",OdbcType.VarChar));
  cmd.Parameters.Add(new OdbcParameter("@lineno",OdbcType.VarChar));
  cmd.Parameters.Add(new OdbcParameter("@now",OdbcType.DateTime));
  cmd.Parameters["@pagename"].Value = pageId;
  cmd.Parameters["@lineno"].Value = lineId;
  cmd.Parameters["@now"].Value = now;
  cmd.ExecuteNonQuery();

Надеюсь, это поможет.

Еще раз спасибо.

EDIT:

Мне приходит в голову, что TimeStamp может быть зарезервированным словом в AccessSQL, и это, вероятно, является причиной синтаксической ошибки. Однако, даже если предположить, что это является причиной, общий вопрос о том, как увидеть SQL-запрос в окончательном виде, остается открытым.

1 Ответ

1 голос
/ 29 апреля 2010

Доступ использует только позиционные параметры.

Все, что вам нужно сделать, это изменить свой SQL на это:

insert into Posts (Page, Line, [TimeStamp], Status) values (?, ?, ?, 'SAVED')

убедившись, что все дополнительные параметры помещены в коллекцию Parameters в правильном порядке.

Редактировать: Обновлено для решения проблемы зарезервированных слов.

Редактировать: Невозможно отследить SQL, который запускается по соединению OLE DB, по крайней мере, в настоящее время. См. эту статью Microsoft KB .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...