none
OleDbDataAdapter讀取DBF的Boolean? RRS feed

  • 問題

  • DBF檔內有一允許NULL的bool欄位,檔案生成時該欄位Default Value為NULL,被選取時值為True,選取後被取消時為False.

    於WINDOWS 7 C# LOCALHOST 以 OleDbDataAdapter (sqlcomm ,conn) --Conn 為 Microsoft.ACE.OLEDB.12.0 

    抓進 DATATABLE 後, 該欄位NULL與True皆被轉為1,False為0. 

    請教如何於sqlcomm中將NULL歸為0?

    sqlcomm 無法使用 "Select  case cul1 when 'true' then 1 else 0 end as culname from table" 會出現 OleDbException (0x80004005): 無法辨識的關鍵字 WHEN....

    2013年9月25日 上午 09:07

解答

  • T-SQL 是 SQL Server 專用,你要使用 ANSI SQL92 。

    安裝 Access 會提供一個 Micosoft Jet SQL 語法說明,那個是 Oledb 支援的語法。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 Ren701221 2013年10月8日 上午 01:44
    2013年9月26日 下午 01:05

所有回覆

  • 您可以參考這篇討論的做法:MySQL IF NOT NULL, then display 1, else display 0

    2013年9月25日 上午 11:33
  • 不行耶.

    我改成"Select case when [cul] IS NOT NULL then [cul] else 0 end as [culname] from table,

    結果一樣" OleDbException (0x80004005): 無法辨識的關鍵字 WHEN "

    這段sqlcomm是要給OleDbDataAdapter (sqlcomm ,conn)用的...
    2013年9月25日 下午 12:23
  • 我想,你應該先確認你這段 SQL 語法在哪套軟體下能執行:

    「Select case when [cul] IS NOT NULL then [cul] else 0 end as [culname] from table」

    Oledb 支援的語法中,並沒有 WHEN 關鍵字,你的 SQL 語法也不對。

    SQL 語法:

    SELECT 欄位

    FROM 表格

    WHERE 條件

    ORDER 排序

    這才是標準結構。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2013年9月25日 下午 04:20
  • 我的語法是用T-SQL, 這個問題是為將DBF檔,讀進C#的Table後,再以BulkCopy的方式寫進SQL Server相對應的DataTable.

    所以Oledb的SelectCommand不能使用CASE...WHEN? 

    那再請教..

    如果我需要將某一DBF的Boolean欄位的True轉為1,NULL及False轉成0(NULL會自動被轉成True),語法該如何下?


    2013年9月26日 上午 01:29
  • T-SQL 是 SQL Server 專用,你要使用 ANSI SQL92 。

    安裝 Access 會提供一個 Micosoft Jet SQL 語法說明,那個是 Oledb 支援的語法。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    • 已標示為解答 Ren701221 2013年10月8日 上午 01:44
    2013年9月26日 下午 01:05