2012-01-20 28 views
-1

幫助我從布爾格式的MS訪問中檢索YES/NO數據類型。如何從Access數據庫中讀取是/否值爲布爾值?

我試着解析它,但總是返回false。

UPDATE:是不是問題,實際上
對不起,它不接受YES/NO爲布爾值。

OleDbconnection dbConnect = new OleDbConnection(".....*.MDB"); 
dbConnect.Open(); 
..... 
... 
//xyz = dbCommand.ExecuteReader() 
bool value = (bool)xyz[1]; 

下一次,我會研究更多,問..對不起人民

+1

它是布爾值並保持布爾值。 – adatapost

+1

你能否展示你所嘗試過的(你的代碼更具體)? –

+0

向我們展示一些代碼。 – gabsferreira

回答

-1

從我記得之前找到的小錯誤,則是/否實際上是1的數值或-1,其中1爲真。每

修正Remou ... 0 =假,-1我曾經訪問是2005年左右,所以我是不完美=真..上次:)

+0

MS Access中的0或-1,這不是一個正確的答案。 – Fionnuala

+0

@Remou,對不起......最後一次使用訪問是在2005年左右,但至少我記得它不是像「YES」或「NO」那樣的字符串或其他可枚舉:) – DRapp

1

的問題是淨的布爾被定義爲

0 = false 
1 = true 

但MS Access使用下面的值的布爾

0 = false 
-1 = true 

所以,你必須手動轉換這整數值到相應的布爾值。

-1

ms訪問可能是.mdb文件或.accdb。

觀察調試器返回的值。

我的猜測是,真是== 0,假是!= 0。

0
false = 0 
true = !false 

這就是你所需要知道的。

2

隨着最後把這個問題休息了希望:

  1. 不要緊什麼Jet數據庫引擎使用爲Yes/TrueNo/False其內部表示。我們得到一個System.Boolean值。

  2. 在Access中,Yes/No字段爲Yes/TrueNo/FalseNULL的值是No/False

測試數據:

YesNoTable.png

測試代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data.OleDb; 

namespace oleDbTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string myConnectionString; 
      myConnectionString = 
        @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
        @"Data Source=C:\Users\Public\Database1.accdb;"; 

      using (var con = new OleDbConnection()) 
      { 
       con.ConnectionString = myConnectionString; 
       con.Open(); 

       using (var cmd = new OleDbCommand()) 
       { 
        // just to be sure, let's force one of the values to Null 
        cmd.Connection = con; 
        cmd.CommandText = 
          "UPDATE YesNoTable SET YesNoField = NULL " + 
          "WHERE Description = 'Null'"; 
        cmd.ExecuteNonQuery(); 
       } 

       using (var cmd = new OleDbCommand()) 
       { 
        cmd.Connection = con; 
        cmd.CommandText = 
          "SELECT ID, YesNoField, Description FROM YesNoTable"; 
        OleDbDataReader rdr = cmd.ExecuteReader(); 
        while (rdr.Read()) 
        { 
         Console.WriteLine(String.Format("Row {0}:", rdr["ID"])); 
         bool boolValue = Convert.ToBoolean(rdr["YesNoField"]); 
         Console.WriteLine(String.Format(" Description is: {0}", rdr["Description"])); 
         Console.WriteLine(String.Format(" Return type is: {0}", rdr["YesNoField"].GetType())); 
         Console.WriteLine(String.Format(" raw value is: {0}", rdr["YesNoField"])); 
         Console.WriteLine(String.Format(" boolValue is: {0}", boolValue)); 
         Console.WriteLine(); 
        } 
       } 
       con.Close(); 
      } 
      Console.WriteLine("Done."); 
     } 
    } 
} 

結果:

Row 1: 
    Description is: Yes 
    Return type is: System.Boolean 
    raw value is: True 
    boolValue is: True 

Row 2: 
    Description is: No 
    Return type is: System.Boolean 
    raw value is: False 
    boolValue is: False 

Row 3: 
    Description is: Null 
    Return type is: System.Boolean 
    raw value is: False 
    boolValue is: False 

Done. 
0
if (Convert.ToBoolean(ds.Tables[0].Rows[i]["UseCurrInWords"].ToString())) 
    chkBobUseCurrencyInWords.Checked = true; 
+2

* *來自審覈隊列:**我可以請求您請您在答案中添加更多背景。僅有代碼的答案很難理解。如果您可以在帖子中添加更多信息,它可以幫助提問者和未來的讀者。 –