如何从Access数据库中读取是/否值为布尔值?

时间:2012-01-20 11:50:07

标签: c# .net wpf ms-access

帮助我以布尔格式从MS访问中检索YES/NO数据类型。

我尝试解析它但总是返回false。

更新:实际上没有问题
对不起,它确实接受YES / NO作为布尔值。

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

下次我会在询问之前进行更多研究并发现轻微的错误..对不起的人

6 个答案:

答案 0 :(得分:2)

希望最终解决这个问题:

  1. 无关紧要 Access数据库引擎用于Yes/TrueNo/False的内部表示的内容。我们返回System.Boolean值。

  2. 在Access中,Yes/No字段为Yes/TrueNo/FalseNULL值为No/False

  3. 测试数据:

    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.
    

答案 1 :(得分:1)

问题是.Net的布尔值定义为

0 = false
1 = true

但MS Access使用以下值作为其布尔值

0 = false
-1 = true

因此您必须手动将此整数值转换为相应的布尔值。

答案 2 :(得分:0)

false = 0
true = !false

这就是你需要知道的全部。

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

根据我的记忆,yes / no实际上是1或-1的数字,其中1为真。

每个Remou校正... 0 =假,-1 =真..上次我使用Access大概是2005年,所以我并不完美:)

答案 5 :(得分:-1)

ms访问可能是.mdb文件或.accdb。

使用调试器监视返回的值。

我猜是真的是= = 0而假是!= 0。