我們有一個使用ODBC API與Access和SQL Server進行交互的應用程序(動態,取決於用戶的配置)。
我發現了一個可能在ODBC SQL驅動程序中的錯誤,或者可能是我們創建的ODBC DSN的錯誤配置問題,或者可能是我們代碼中的某個錯誤。
當文檔被編輯並保存時,我們查詢數據庫以查看該文件是否在數據庫中有對應的記錄 - 如果是這樣,我們使用文檔中更新的數據更新記錄;如果沒有,我們做一個插入來爲它創建必要的記錄。
我們使用文件名作爲我們表上的唯一主鍵,並且這種方式正常工作。 的錯誤是,如果文件名包含當前ANSI代碼頁之外的字符,然後選擇表示不匹配:
SQL: SELECT * FROM "My Designs" WHERE "PATHNAME" = '\\FILE-SERVER\Home Folders\User Files\狹すぎて丸め処理が出來ません!!.foo' [# matches = 0]
然而,當插入嘗試,我們得到了一個獨特的鍵衝突(當然) - 因爲那個文件名已經有記錄了。
Database error: Violation of PRIMARY KEY constraint 'PK__My Desig__1B3D5B4BF643706B'. Cannot insert duplicate key in object 'dbo.My Designs'. The duplicate key value is (\\FILE-SERVER\Home Folders\User Files\狹すぎて丸め処理が出來ません!!.foo).
The statement has been terminated.
我一直在用細齒梳代碼,我沒有看到任何錯誤。 :(
正在生成的SQL語句生成的文件名的Unicode輸出正確的。我們的應用程序被編譯爲Unicode格式。該列在ODBC SQL_WVARCHAR
說話。
我已經嘗試添加AutoTranslate=no
到DSN配置字符串,但似乎沒有任何效果
我試過從ODBC控制面板記錄數據庫連接,可悲的是,該接口產生一個ANSI日誌文件 - 所以我無法驗證使用該工具的UNICODE/ANSI問題。
次的問題:
- 是否有一個工具,我可以用它來驗證這些聲明是 創建/ ODBC驅動程序到SQL Server數據庫 發出正確?
- 有沒有更好的方式來使用ODBC,以便在SELECT查詢和INSERT請求中驅動程序不會被簡單的UNICODE字符串裝入?
- 對如何處理這個問題的任何其他的想法(短更換我們的技術)
您是否嘗試過使用SQL Server Management Studio進行命令?這是你應該做的第一件事,以確保你不會浪費時間認爲這是一個ODBC問題。 – PaulMcKenzie 2014-12-04 16:47:19
@PaulMcKenzie - 使用SQL SMS無法正常工作。事實上,同一個查詢產生0個結果,但只包含當前代碼頁中的字符的結果會產生有效的結果。有任何想法嗎? – Mordachai 2014-12-04 18:48:06
目標是查看SMS是否可以工作。如果SMS無法成功處理查詢,您將無法獲得使ODBC調用正常工作的程序。我不是SQL Server專家,但SMS通常是查看查詢是否有效的黃金標準。 – PaulMcKenzie 2014-12-04 19:38:45