IDataReaderは古く、一部の人はそれをダーティコードと見なしていることに気付きましたが、私が取り組んでいるサイトでは、これが彼らが使用しているものです。複数の結合を使用してテーブルから特定のIDを取得するクエリを実行するIDataReaderステートメントがあります。現在、このサイトにはDALがありますが、一度に1つのテーブルから選択する機能しかサポートされていないため、結合でselectステートメントを使用しても機能しません。これが、私がこれでIDataReaderを使用することを余儀なくされている理由です。
if (Request.QueryString["CategoryId"].ToString() == "0")
{
using (IDataReader getCategoryID = DB.GetRS("SELECT ItemCatalogCategory.CategoryID FROM UserCustomerCatalog INNER JOIN ItemCatalogCategory ON UserCustomerCatalog.ItemProfileCatalogID = ItemCatalogCategory.ItemProfileCatalogID " +
"INNER JOIN ItemCategory ON ItemCatalogCategory.CategoryID = ItemCategory.CategoryID INNER JOIN StoreCatalog ON UserCustomerCatalog.StoreCatalogID = StoreCatalog.StoreCatalogID " +
"WHERE UserCustomerCatalog.ItemProfileCatalogID = '" + Request.QueryString["CatalogID"] + "' AND UserCustomerCatalog.CustomerID =' " + Session["Customer"].ToString() + "' AND ItemCategory.ProductID = '" + productis + "'"))
{
if (getCategoryID.Read())
{
string categoryID = getCategoryID["ItemCatalogCategory.CategoryID"].ToString();
string lookmike = Request.Url.AbsolutePath + "?CatalogID=" + catalogis + "&ProductID=" + productis + "&CatalogIndex=" + Request.QueryString["CatalogIndex"] + "&CategoryID=" + categoryID;
Response.Redirect(Request.Url.AbsolutePath + "?CatalogID=" + catalogis + "&ProductID=" + productis + "&CatalogIndex=" + Request.QueryString["CatalogIndex"] + "&CategoryID=" + categoryID);
}
else
{
Response.Redirect(Request.Url.AbsolutePath + "?CatalogID=" + catalogis + "&ProductID=" + productis + "&CatalogIndex=" + Request.QueryString["CatalogIndex"] + "&CategoryID=" + Request.QueryString["CategoryId"]);
}
}//end using getCategoryID
}
これは私が持っているものですが、それが得られたとき:
if (getCategoryID.Read())
falseとしてレンダリングされ、例外はスローされず、エラーや警告もありません。私は過去にこのタイプの選択を問題なく実行しましたが、.Read()がfalseを返す理由を理解できません。
誰かがそれが読まない理由を提案できますか?さらにコードが必要な場合は、必要に応じて提供できます。どんな助けでもありがたいです、前もってありがとう。