DataTable.Load,一行或多行包含违反非空、唯一或外键约束的值

2024-04-24

我搜索了很多,但找不到解决方案。

我收到错误:

未能启用约束。一行或多行包含违反非空、唯一或外键约束的值。

I run DataTable.GetErrors()并看到一些列设置为Not NULL在 SQL 精简版数据库中。这些列用于LEFT OUTER JOIN查询,因此在运行查询时它们为空。 (当我在VS中的服务器资源管理器中运行查询时,我可以获得结果)。 尝试加载数据表中的数据时出现错误:

using (SqlCeCommand Cmd = new SqlCeCommand("Query HERE", "Connection HERE"))
                {
                    C.Open();
                    using (SqlCeDataReader Rdr = Cmd.ExecuteReader())
                    {
                        DataTable DT = new DataTable();
                        DT.Load(Rdr);
                        return DT;
                    }
                }

我尝试了很多解决方案来克服这个问题,但我无法解决它。我知道“EnforceConstraints”,但是由于我不使用任何数据集,因此我无法更改该属性。


我设法通过获取表的架构、迭代架构表的行(它们是实际表的列)并创建与架构列具有相同属性的列(唯一的区别是将新列的AllowDBNull设置为true 和 Unique 以及 AutoIncrement 为 false),最后将新列添加到新的数据表中,该数据表稍后将填充我们实际表的数据(通过 DataReader 的帮助仅获取数据而不获取架构)。

这是代码:

using (SqlCeConnection C = new SqlCeConnection(DBStr))
            using (Cmd)
            {   //using SqlCeCommand
                Cmd.Connection = C;
                C.Open();
                using (SqlCeDataReader Rdr = Cmd.ExecuteReader())
                {
                    //Create datatable to hold schema and data seperately
                    //Get schema of our actual table
                    DataTable DTSchema = Rdr.GetSchemaTable();
                    DataTable DT = new DataTable();
                    if (DTSchema != null)
                        if (DTSchema.Rows.Count > 0)
                            for (int i = 0; i < DTSchema.Rows.Count; i++)
                            {
                                //Create new column for each row in schema table
                                //Set properties that are causing errors and add it to our datatable
                                //Rows in schema table are filled with information of columns in our actual table
                                DataColumn Col = new DataColumn(DTSchema.Rows[i]["ColumnName"].ToString(), (Type)DTSchema.Rows[i]["DataType"]);
                                Col.AllowDBNull = true;
                                Col.Unique = false;
                                Col.AutoIncrement = false;
                                DT.Columns.Add(Col);
                            }

                    while (Rdr.Read())
                    {
                        //Read data and fill it to our datatable
                        DataRow Row = DT.NewRow();
                        for (int i = 0; i < DT.Columns.Count; i++)
                        {
                            Row[i] = Rdr[i];
                        }
                        DT.Rows.Add(Row);
                    }
                    //This is our datatable filled with data
                    return DT;
                }
            }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DataTable.Load,一行或多行包含违反非空、唯一或外键约束的值 的相关文章

随机推荐