2010-04-28 28 views
2

當我通過ADO.NET向C#程序發送參數化查詢時,出現語法錯誤。ADO.NET中參數化SQL命令的最終形式

我當然知道我的代碼中包含了什麼SQL字符串,裏面嵌入了參數名。

有沒有人知道我可以看看最後發送到DBMS的SQL字符串後,我打電話cmd.ExecuteNonQuery

謝謝。

編輯:

有沒有辦法看到交互式調試器或訪問日誌或者一些字符串? 爲了讓任何人重現我的確切問題,他們將不得不擁有我的數據庫,這是不會發生的。然而,由於興趣在什麼,我試圖做我發佈下面的代碼片段的細節被表示爲:

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

我希望它能幫助。

再次感謝。

編輯:

它發生,我認爲「時間戳」可能是AccessSQL保留字,這很可能是語法錯誤的原因。但是,即使假設這是原因,如何以最終形式查看SQL查詢的一般問題仍然是開放的。

+1

你也可以在這裏發佈SQL ......還有一個問題......訪問的ADO.NET提供程序是真的在SQL中使用參數名還是隻是位置參數(即問號?) – 2010-04-28 19:33:39

+1

令我驚訝的是, TimeStamp *是一個保留字:support.microsoft.com/kb/286335 – 2010-04-29 01:21:32

回答

1

訪問只使用位置參數。

所有你需要做的是改變你的SQL這樣的:

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

確保把任何額外的參數爲Parameters收集正確的順序。

編輯:已更新爲解決保留字問題。

編輯:不可能跟蹤在OLE DB連接上運行的SQL,至少不是當前的。見this Microsoft KB article

+0

這很好用,但不是解決有關查看到達Access的SQL的主要問題。 – mcoolbeth 2010-05-18 20:29:11

+0

@mcoolbeth:我更新了我的答案。 – 2010-05-18 22:02:21