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

Posted

技术标签:

【中文标题】如何从 Access 数据库中读取是/否值作为布尔值?【英文标题】:How to read Yes/No value as boolean from an Access database? 【发布时间】:2012-01-20 11:50:07 【问题描述】:

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

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

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

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

下次我会研究更多并在询问之前发现小错误..对不起人们

【问题讨论】:

它是布尔值并保持布尔值。 你能展示你尝试过的东西吗(更具体地说是你的代码)? 【参考方案1】:

希望最终能解决这个问题:

    Access 数据库引擎使用什么来表示Yes/TrueNo/False 的内部表示无关紧要。我们返回一个System.Boolean 值。

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

测试数据:

测试代码:

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.

【讨论】:

【参考方案2】:

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

0 = false
1 = true

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

0 = false
-1 = true

所以你必须手动将这个整数值转换成对应的布尔值。

【讨论】:

【参考方案3】:
false = 0
true = !false

这就是你需要知道的一切。

【讨论】:

【参考方案4】:
if (Convert.ToBoolean(ds.Tables[0].Rows[i]["UseCurrInWords"].ToString()))
    chkBobUseCurrencyInWords.Checked = true;

【讨论】:

来自审核队列:我可以请求您在您的答案周围添加更多上下文。仅代码的答案很难理解。如果您可以在帖子中添加更多信息,这将对提问者和未来的读者都有帮助。【参考方案5】:

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

用调试器观察返回的值。

我的猜测是 true 是 == 0,而 False 是 !=0。

【讨论】:

【参考方案6】:

据我记得,是/否实际上是 1 或 -1 的数字,其中 1 为真。

每个 Remou 的更正... 0 = false,-1 = true.. 我上次使用 Access 大约是 2005 年,所以我并不完美 :)

【讨论】:

@Remou,对此感到抱歉......我最后一次使用 access 是在 2005 年左右,但至少我记得它不是像“YES”或“NO”这样的字符串,或其他可枚举的:)

以上是关于如何从 Access 数据库中读取是/否值作为布尔值?的主要内容,如果未能解决你的问题,请参考以下文章

从 H2 数据库中读取 TINYINT 值作为布尔值/布尔值时出现 MappingException

如何从 Firebase 检索图像作为布尔数据?

如何根据正则表达式查询将是或否值插入标志列

如何使用 asp.net 从客户端读取 ms-access 数据库文件

如何让 MS Access 以特定时间间隔从 .txt 文件中读取?

如何通过 Java 从 MS Access 2007 数据库中读取 Unicode 字符?