从Access DB读取yes/no字段会产生DBnull
本文关键字:字段 DBnull no Access DB 读取 yes | 更新日期: 2023-09-27 18:25:56
我正在将一个列/字段作为是/否字段添加到现有的Access数据库中,这样就可以显示一个复选框,供用户在Access工具内部和外部以编程方式输入/编辑。我使用以下SQL语句在表中创建列CCD_ 1。(我从MS文档中了解到,我不能在该语句中输入DEFAULT部分!)
在创建之后,在启动后的任何时候,我都通过以下方式创建适配器:
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = "SELECT * FROM tablename";
DataTable[] dtSchema = adapter.FillSchema(DBname, SchemaType.Source);
adapter.Fill(DataSet name); //Dataset used in DataGridView object
我看到的效果是:
- 添加的列架构在VS 2012调试器中正确显示为布尔值
- 该列在"项数组"中显示为未初始化的"{}"值,而不是像其他已存在的YES/NO列那样显示为true/false
- Access DB中具有true或false条件的手动输入记录不会显示在使用数据集的DataGridView中。无论价值如何
- 如果我使用DataGridView在使用此数据集的视图的各种记录中输入true/false,则列/字段架构现在已"更正",并且true/false将正确显示在"项数组"调试器显示中,而不是{}未初始化的值
我希望它允许正确读取YESNO字段数据,但更改创建SQL或SELECT语句的语法没有效果。以前创建的YESNO列显示正确,有没有其他方法可以执行ALTER语句来创建我可以使用的列?
ALTER OleDb命令尝试设置默认值的失败是一个可以通过Update命令在添加后设置所有新记录字段值来修复的项。我主要担心的是根本无法读取DataGridView列复选框中的YESNO存储值。在适配器过程中未初始化这些值。填充()。(在调试器中显示{}值。)
我发现,让YESNO字段正确初始化的唯一方法是,在我用后续的"UPDATE tablename SET fieldname = false
"以编程方式创建字段后,将每个布尔值初始化为false。谢谢你看我的问题。以这种方式设置默认值后,它似乎运行良好。这似乎真的没有必要,但它起了作用。