无法使用 c# tableadapter 启用约束

Failed to enable constraints using c# tableadapter

我可能有一个非常愚蠢的问题,但在对 google 进行了大量研究并尝试了几件事之后,我没有找到解决我的问题的方法。

我正在使用 TableAdapter 和 运行 以下查询:

 SELECT        
    table1.column2, table2.column2
 FROM          
    table2 
 INNER JOIN
    table1 ON table2.ID = table1.table2ID
 WHERE        
    (table1.column2 = @something)

运行以下代码

   DataTable DT = new DataTable();
   DT = TableAdapter.GetByColumn2("something");

工作正常,除非生成的 DataTable 为空。当它 returns 一个值时,我得到以下错误:

ConstraintException was unhandled Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.

如果我 运行 手动查询,它 returns 正是我此时需要的信息,并且 SQL 不会抱怨任何限制。

我是 C# 的真正新手,如果有人能提供帮助,我将不胜感激。

谢谢...

现在,您只查询 return 1 列,如果您希望结果集中的两列都使用别名

http://sqlfiddle.com/#!3/d6d68/4

您必须在 sql 查询中使用别名,以便查询 return 两列。

SELECT table1.column2 as Table1Column2, table2.column2 as Table2Column2
    FROM  table2 INNER JOIN
        table1 ON table2.ID = table1.table2ID
    WHERE  (table1.column2= @something)

这可能不是 OP 面临的确切问题,但 OP 必须包括他得到的错误以获得准确的解决方案。

您应该像这样从 DataAdapter 填充您的 DataTable

        SqlDataAdapter SDA = new SqlDataAdapter();
        DataTable dt = new DataTable();
        SqlConnection conn = new SqlConnection(connectionString);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = @"SELECT        table1.column2, table2.column2
        FROM          table2 
        INNER JOIN
           table1 ON table2.ID = table1.table2ID
         WHERE        (table1.column2= @something)";
        cmd.Connection = conn;
        SDA.SelectCommand = cmd;
        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            SDA.Fill(dt);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            conn.Close();
        }

我可能发现了这个问题,如果有人能在必要时修改我的想法,我会很高兴。

C# 中的 TableAdapers 似乎需要 SQL 语句在结果中包含给定 table 的所有列。如果我只省略一列,代码将发出此约束错误。

可以添加其他列作为其他 table 的别名,但需要将它们作为附加列添加到结果中。

就我个人而言,我目前不理解此行为背后的更深层意义,因为我认为 SQL 应该用于在给定点准确检索我需要的数据。 TableAdapters 以某种方式要求我每次使用它们时都发出 "select * from table"。

请大家 - 如果我在这方面理解有任何错误,请纠正我。

谢谢!