无法使用 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"。
请大家 - 如果我在这方面理解有任何错误,请纠正我。
谢谢!
我可能有一个非常愚蠢的问题,但在对 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"。
请大家 - 如果我在这方面理解有任何错误,请纠正我。
谢谢!