2011-06-14 55 views
3

我有一個VB.Net應用程序。我將它與MS Access數據庫連接起來。現在我必須執行查詢。我的查詢是:Update table1 set field1=replace(field1,'|','"')表達式中未定義的函數'替換'

此查詢似乎從Access數據庫的查詢分析器工作正常,但是當我做同樣的形式VB.Net代碼時,它會引發錯誤,指出「未定義的函數」替換表達式「

我正在使用OLEDB連接和命令。我正在使用「執行查詢」功能。

任何人都可以幫助我嗎?

回答

4

不幸的是,當您從您的VB.Net應用程序連接到Access數據庫時,根本沒有使用Access查詢引擎。你正在使用Jet。在Access中可用的某些功能(如替換爲)在Jet中不可用。

經典解決方案是使用的組合IIFINSTR等(這些是可用)。是的,它不如取代玩,但你必須學會​​不做。

+0

我很新的SQL查詢。 Iam困惑於找到在Jet中接受的替換函數的替代方案。任何幫助? – Rajdeep 2011-06-14 09:58:18

+0

不,CASE不可用。 – 2011-06-15 22:57:01

+0

@HansUp,感謝捕捉。編輯相應 – hawbsl 2012-05-30 08:50:40

3

這個問題目前被接受的答案已經過時了。使用

Provider=Microsoft.ACE.OLEDB.12.0

下面的C#代碼工作得很好:

cmd.CommandText = 
    "UPDATE table1 SET field1 = Replace(field1, '|', '\"')"; 
cmd.ExecuteNonQuery(); 

換句話說,該Replace()功能可能造成與舊的「噴氣機」 OLEDB驅動程序問題(或許更早版本的「ACE」驅動程序),但對於Access 2010的版本,這不再是一個問題。

+0

是否有某個版本的VS需要運行Microsoft.Ace.OLEDB.12?如果沒有,那麼我可以在哪裏添加到我的項目? – 2016-03-07 18:47:11

+0

沒有特定版本的Visual Studio是必需的,你不應該需要添加任何額外的引用到你的項目。只需使用'System.Data.OleDb'對象和一個包含'Provider = Microsoft.ACE.OLEDB.12.0'的連接字符串即可。 (並確保已安裝的Access數據庫引擎版本的「bitness」與您的應用程序的「bitness」匹配:64位或32位。) – 2016-03-07 19:30:15

+0

我沒有看到Ace.OLEDB.12.0作爲選項導入我的班級。我將System.Data.OleDb導入到我的類中 – 2016-03-07 19:40:19

相關問題