如何从 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/True
和No/False
的内部表示无关紧要。我们返回一个System.Boolean
值。
在 Access 中,Yes/No
字段为 Yes/True
或 No/False
。 NULL
的值为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
如何使用 asp.net 从客户端读取 ms-access 数据库文件