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

C# 如何将是/否值作为布尔值从Access数据库中读取?,c#,.net,wpf,ms-access,C#,.net,Wpf,Ms Access,帮助我以布尔格式从MS access检索YES/NO数据类型 我试图解析它,但它总是返回false 更新:实际上不是问题 抱歉,它接受是/否作为布尔值 OleDbconnection dbConnect = new OleDbConnection(".....*.MDB"); dbConnect.Open(); ..... ... //xyz = dbCommand.ExecuteReader() bool value = (bool)xyz[1]; 下次我会做更多的研究,在提问之前找出一些小

帮助我以布尔格式从MS access检索
YES/NO
数据类型

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

更新:实际上不是问题
抱歉,它接受是/否作为布尔值

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

下次我会做更多的研究,在提问之前找出一些小错误。。对不起,大家

根据我的记忆,是/否实际上是一个1或-1的数字,其中1为真


每移动一次校正。。。0=假,-1=真。。我上次使用Access大约是在2005年,所以我并不完美:)

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

0 = false
1 = true
但是MS Access使用以下值作为其布尔值

0 = false
-1 = true

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

ms access可能是.mdb文件或.accdb

OleDbconnection dbConnect = new OleDbConnection(".....*.MDB");
dbConnect.Open();
.....
...
//xyz = dbCommand.ExecuteReader()
bool value = (bool)xyz[1];
使用调试器查看返回的值

我猜真的是==0,假的是=0

false = 0
true = !false

这就是你所需要知道的。

希望最终解决这个问题:

  • Access数据库引擎对其内部表示法
    Yes/True
    No/False
    使用什么并不重要。我们得到一个
    System.Boolean

  • 在Access中,
    Yes/No
    字段为
    Yes/True
    No/False
    NULL
    值为
    No/False

  • 测试数据:

    测试代码:

    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用系统文本;
    使用System.Data.OleDb;
    名称空间oleDbTest
    {
    班级计划
    {
    静态void Main(字符串[]参数)
    {
    字符串myConnectionString;
    myConnectionString=
    @“Provider=Microsoft.ACE.OLEDB.12.0;”+
    @“数据源=C:\Users\Public\Database1.accdb;”;
    使用(var con=new OleDbConnection())
    {
    con.ConnectionString=myConnectionString;
    con.Open();
    使用(var cmd=new OleDbCommand())
    {
    //为了确定,让我们强制其中一个值为Null
    cmd.Connection=con;
    cmd.CommandText=
    “更新YesNoTable集合YesNoField=NULL”+
    “其中Description='Null';
    cmd.ExecuteNonQuery();
    }
    使用(var cmd=new OleDbCommand())
    {
    cmd.Connection=con;
    cmd.CommandText=
    “从YesNoTable中选择ID、YesNoField、Description”;
    OleDbDataReader rdr=cmd.ExecuteReader();
    while(rdr.Read())
    {
    WriteLine(String.Format(“Row{0}:”,rdr[“ID”]);
    bool boolValue=Convert.ToBoolean(rdr[“YesNoField”]);
    WriteLine(String.Format(“Description is:{0}”,rdr[“Description”]);
    WriteLine(String.Format(“返回类型为:{0}”,rdr[“YesNoField”].GetType());
    WriteLine(String.Format(“原始值为:{0}”,rdr[“YesNoField”]));
    WriteLine(String.Format(“boolValue是:{0}”,boolValue));
    Console.WriteLine();
    }
    }
    con.Close();
    }
    控制台。WriteLine(“完成”);
    }
    }
    }
    
    结果:

    第1行:
    描述是:是的
    返回类型为:System.Boolean
    原始值为:True
    布尔值是:真的
    第2行:
    描述是:没有
    返回类型为:System.Boolean
    原始值为:False
    布尔值为:False
    第3行:
    说明为:空
    返回类型为:System.Boolean
    原始值为:False
    布尔值为:False
    完成。
    
    它是布尔型的,并且仍然是布尔型的。您能展示一下您尝试了什么(更具体地说是您的代码)吗?@Remou,很抱歉。。。我上一次使用access是在2005年左右,但至少我记得它不是像“是”或“否”这样的字符串,也不是其他可枚举的:)来自审阅队列:我可以请求您在您的答案周围添加一些上下文吗。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。