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);
表のいずれの列のどの行にもヌルフィールドはありません。テーブルは十分に小さいので、nullデータを簡単に検出できます。bIDはblog_topicsのキーであり、cIDはブログコメントのキーであることに注意してください。
いずれにせよ、これを実行すると、次のエラーが発生します。
制約を有効にできませんでした。1つ以上の行に、null以外、一意、または外部キーの制約に違反する値が含まれています。
テーブルには1xNの関係があり、ブログエントリごとに多くのコメントがあります。DISTINCTを使用してクエリを実行し、戻りフィールドからComment_Narrativeを削除すると、データが正しく返されます(ただし、他の行が必要です)。ただし、他の行を返すと、上記のエラーが発生します。
リターンテーブルには、そこに配置しなかった制約があることを示していると思います。したがって、テーブルの1つに主キーが定義されているため、クエリ自体の呼び出しからその制約を何らかの形で継承している必要があります。持つ必要があります)。しかし、なぜクエリビルダーでクエリが正常に機能するのでしょうか。クエリビルダーは、bIDが結果に重複していることを気にしません(そして、そうすべきではありません)が、コードビハインドは気にします。
補遺:
テストと同じように、
- 返品リストからbIDを削除しましたが、それでもエラーが発生します。
- blog_topics.bIDから主キーを削除しましたが、同じエラーが発生します。
これは、問題を引き起こしているのは私の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: }
私は困惑しています....多分それが私がトライキャッチで何もしていないのを見て、私のために最適化しているのでない限り。
別の補遺:デザイナーに追加したテストコードを無視しているのではないかと疑って、キャッチに何かを追加しました。同じエラーが発生し、このコードが表示されないように動作します。(まあ、わかりました。以前と同じようにブラウザに出力されるため、このコードは表示されません。)
// zzz
try
{
this.Adapter.Fill(dataTable);
}
catch ( global::System.Exception ex )
{
System.Web.HttpContext.Current.Response.Redirect("errorpage.aspx");
}
元の投稿を作成したとき、私はすでに回避策を試みていました。うさぎの穴をどこまで下る余裕があるのかわかりません。たぶん、私は混乱全体をC#に読み込んで、すべての結合を行い、自分自身をがらくたにします。私は最近習慣から抜け出したばかりなので、それをするのは本当に嫌いですが、神とマイクロソフトが意図した方法でツールを使用するために誠意を持って努力していると思います。ウィットエンドから、tff。