簡體   English   中英

ADO.NET中參數化SQL命令的最終形式

[英]Final form of parametric SQL commands in ADO.NET

當我通過ADO.NET從C#程序向Access發送參數化查詢時,出現語法錯誤。

我當然知道我的代碼中包含了什么SQL字符串,並且參數名稱嵌入其中。

有誰知道在調用cmd.ExecuteNonQuery之后如何查看最終發送到DBMS的SQL字符串?

謝謝。

編輯:

沒有辦法在交互式調試器或訪問日志中看到該字符串? 為了讓任何人重現我的確切問題,他們都必須擁有我的數據庫,而這不會發生。 但是,由於已經對我要執行的操作的細節表達了興趣,因此我將發布以下代碼片段:

  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();

希望對您有所幫助。

再次感謝。

編輯:

在我看來,“ TimeStamp”可能是AccessSQL中的保留字,這很可能是語法錯誤的原因。 但是,即使假設這是原因,如何查看最終形式的SQL查詢的一般問題仍然存在。

訪問僅使用位置參數。

您需要做的就是將您的SQL更改為此:

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

確保以適當的順序將任何其他參數放入“ Parameters集合。

編輯:更新以解決保留字的問題。

編輯:不可能跟蹤在OLE DB連接上運行的SQL,至少當前不會。 請參閱此Microsoft KB文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM