我搜索了很多,但找不到解决方案。
我收到错误:
未能启用约束。一行或多行包含违反非空、唯一或外键约束的值。
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(使用前将#替换为@)