PDA

View Full Version : مشکل در cache کردن datareader



Behnama
پنج شنبه 25 مرداد 1386, 14:38 عصر
با سلام . من سعی می کنم یک دیتاریدر رو در سایتم ابتدا cache کنم و بعد ازش استفاده کنم . اما هربار به هر طریق ( مثل in datareader.read() .... ) عمل می کنم خطایی گرفته میشه که هیچ آیتمی در این دیتاریدر وجود نداره . در حالیکه من تست کردم و دیدم که دیتاریدر پر شده . آیا دیتاریدر با cache شدن مشکلی داره یا من اشتباهی انجام دادم ؟

Behrouz_Rad
پنج شنبه 25 مرداد 1386, 21:34 عصر
توضیحاتت کافی نیست.
کدها رو در اینجا قرار بده.

Behnama
پنج شنبه 25 مرداد 1386, 21:49 عصر
PublicFunction GetCategoriesByParentID(ByVal parentID AsInteger) As System.Data.DataTable
Dim connectionString AsString = ConfigurationSettings.AppSettings("ConString")
Dim dbConnection As System.Data.IDbConnection = New System.Data.OleDb.OleDbConnection(connectionString )
Dim DataSet AsNew DataSet
Dim queryString AsString = "SELECT [Categories].* FROM [Categories] WHERE ([Categories].[ParentID] = @ParentID) Order By CatName"
Dim dbCommand As System.Data.IDbCommand = New System.Data.OleDb.OleDbCommand
dbCommand.CommandText = queryString
Dim dbParam_parentID As System.Data.IDataParameter = New System.Data.OleDb.OleDbParameter
dbParam_parentID.ParameterName = "@ParentID"
dbParam_parentID.Value = parentID
dbParam_parentID.DbType = System.Data.DbType.Int32
dbCommand.Parameters.Add(dbParam_parentID)
dbCommand.Connection = dbConnection
Dim Adapter AsNew OleDbDataAdapter(dbCommand)
Adapter.Fill(DataSet)
Return DataSet.Tables(0)
EndFunction

<scriptrunat="server">
Dim Code AsNew Codes

' ConfigurationSettings.AppSettings("ConString")
ProtectedSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load
If Cache("MainCategories") IsNothingThen
Cache("MainCategories") = Code.GetCategoriesByParentID(0)
EndIf
DataList1.DataSource = Cache("MainCategories")
DataList1.DataBind()
EndSub
ProtectedSub DataList1_ItemCommand(ByVal source AsObject, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs )
Response.Redirect(String.Format("/Advert/Ads.aspx?CatID={0}", e.CommandArgument))
EndSub
</script>
<asp:DataListID="DataList1"runat="server"
BackColor="Transparent"BorderColor="Transparent"BorderStyle="None"CellPadding="3"W
idth="120px"HorizontalAlign="Center"Width="128px"OnItemCommand="DataList1_ItemCommand"Height="120px"Font-Bold="False"Font-Names="Tahoma"Font-Size="8pt">
<ItemTemplate>
<asp:LinkButtonID="LBNavBar"runat="server"ForeColor="#4A3C8C"
Font-Bold="true"Font-Underline="false"
CommandArgument=<%#Container.DataItem("CatID")%>
Text=<%#Container.DataItem("CatName")%>/>
<spanstyle="color:Red; font-size=7pt; font-family='Times New Roman'"><</span>
</ItemTemplate>
<FooterStyleBackColor="#B5C7DE"ForeColor="#4A3C8C"/>
<SelectedItemStyleBackColor="#738A9C"Font-Bold="True"ForeColor="#F7F7F7"/>
<AlternatingItemStyleBackColor="Transparent"BorderColor="Transparent"/>
<ItemStyleBackColor="Transparent"ForeColor="#4A3C8C"HorizontalAlign="Right"Wrap="False"BorderColor="Transparent"/>
<HeaderStyleBackColor="#4A3C8C"Font-Bold="True"ForeColor="#F7F7F7"/>
<EditItemStyleBackColor="Transparent"BorderColor="Transparent"/>
</asp:DataList>


تو این کد اگر تابع GetCategoriesByParentID به جای Table به صورت Datareader باشه ، اون خطایی که گفتم حادث می شه . از Dataset هم که استفاده کنم خطایی دریافت نمی کنم .