我有以下名为 searchit 的查询
SELECT 2 AS sourceID, BLOG_COMMENTS.bID, BLOG_TOPICS.Topic_Title,
BLOG_TOPICS.LFD, BLOG_TOPICS.LC,
BLOG_COMMENTS.Comment_Narrative
FROM BLOG_COMMENTS INNER JOIN BLOG_TOPICS
ON BLOG_COMMENTS.bID = BLOG_TOPICS.bID
WHERE (BLOG_COMMENTS.Comment_Narrative LIKE @Phrase)
此查询执行并在查询生成器中返回正确的结果!但是,查询需要在代码隐藏中运行,所以我有以下行:
DataTable blogcomments = btad.searchit(aphrase);
在任何一个表中的任何列的任何行中都没有空字段。这些表足够小,我可以轻松检测到空数据。请注意,bID 是 blog_topics 的关键,而 cID 是博客评论的关键。
无论如何,当我运行它时,我会收到以下错误:
无法启用约束。一行或多行包含违反非空、唯一或外键约束的值。
表格具有 1 x N 的关系,每个博客条目都有许多评论。如果我使用 DISTINCT 运行查询并从返回字段中删除 Comment_Narrative,它会正确返回数据(但我需要其他行!)但是,当我返回其他行时,出现上述错误!
我想告诉我返回表上有一个我没有放在那里的约束,因此它必须以某种方式从对查询本身的调用继承该约束,因为其中一个表恰好定义了一个主键(它一定有)。但是为什么查询在查询构建器中工作正常?查询构建器不关心结果中的 bID 是否被欺骗(它不应该如此),但代码隐藏确实关心。
附录:
就像测试一样,
- 我从退货列表中删除了投标,但仍然收到错误消息。
- 我从 blog_topics.bID 中删除了主键,我得到了同样的错误。
这有点告诉我,导致问题的不是我的投标被欺骗的事实。
另一个测试:我进入了设计器代码(我知道这很讨厌,我只是绝望)。我添加了以下内容:
// zzz
try
{
this.Adapter.Fill(dataTable);
}
catch ( global::System.Exception ex )
{
}
奇怪的是,当我运行它时,我得到与以前相同的错误并且它没有显示我在错误消息中所做的更改:
Line 13909: }
Line 13910: BPLL_Dataset.BLOG_TOPICSDataTable dataTable = new BPLL_Dataset.BLOG_TOPICSDataTable();
Line 13911: this.Adapter.Fill(dataTable);
Line 13912: return dataTable;
Line 13913: }
我很难过......除非它看到我在 try catch 中没有做任何事情并且正在为我优化。
另一个附录:怀疑它忽略了我添加到设计器的测试代码,我添加了一些东西。它会产生相同的错误并且表现得好像它没有看到此代码。(好吧,它看不到这段代码,因为它在浏览器中打印出来的内容和以前一样。)
// zzz
try
{
this.Adapter.Fill(dataTable);
}
catch ( global::System.Exception ex )
{
System.Web.HttpContext.Current.Response.Redirect("errorpage.aspx");
}
问题是,当我发布原始帖子时,我已经在尝试解决问题了。我不确定我能从兔子洞走多远。也许我将整个混乱读入 C# 并自己完成所有的连接和废话。我真的很讨厌这样做,因为我最近才改掉这个习惯,但我认为我正在尽善尽美地努力按照上帝和微软的意图使用这个工具。从智慧结束,tff。