从Access DB读取是/否字段会产生DBnull

时间:2015-12-07 16:39:37

标签: c# datagridview ms-access-2007

我将一个列/字段添加到现有的Access数据库作为是/否字段,以便在Access工具中以及以编程方式外部显示用于用户输入/编辑的复选框。 我使用此SQL语句在表中创建列 "ALTER TABLE tablename ADD COLUMN UpdateLocked YESNO"。 (我从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

我看到的效果是:

  1. 添加的列架构在VS 2012调试器中正确显示为布尔值。
  2. 该列显示为' {}' "项目数组中未初始化的值"而不是其他已存在的YES / NO列的真/假。
  3. 在使用DataSet的DataGridView中显示真假条件的Access DB中手动输入的记录。无论价值如何。
  4. 如果我使用DataGridView在使用此DataSet的视图的各种记录中输入true / false,则现在可以更正列/字段模式"并且在"项目数组中正确显示了true / false"调试器显示而不是{}未初始化的值。
  5. 我希望它允许正确读取YESNO字段数据,但更改创建SQL或SELECT语句的语法无效。 之前创建的YESNO列正确显示,是否有不同的方法来创建我可以使用的列的ALTER语句?

    尝试设置默认值的ALTER OleDb命令失败是一个可以使用Update命令修复的项目,用于在添加后立即设置所有新记录字段值。我的主要问题是无法在我的DataGridView列复选框中读取YESNO存储的值。在adapter.Fill()期间,值未初始化。 (在调试器中显示{}值。)

1 个答案:

答案 0 :(得分:1)

我发现我能够正确初始化YESNO字段的唯一方法是在以编程方式使用后续“UPDATE tablename SET fieldname = false”创建字段后将每个布尔值初始化为false。感谢您查看我的问题。以这种方式设置默认值后,它似乎工作正常。这似乎没必要,但它确实有效。