我进行了很多搜索,但找不到解决方案。
我得到错误:
无法启用约束。一或多个行包含违反非null,唯一或外键约束的值。
我运行DataTable.GetErrors(),发现Not NULL在SQL Compact Edition数据库中将某些列设置为。这些列用于LEFT OUTER JOIN查询中,因此在运行查询时它们为null。(当我在VS的Server Explorer中运行查询时,可以得到结果)。尝试在数据表中加载数据时发生错误:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了许多解决方案来克服此问题,但是我无法解决它。我知道“ 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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3670 次 |
| 最近记录: |