PDA

View Full Version : بیرون کشیدن اطلاعات از دیتاست



hobab-theme
یک شنبه 31 خرداد 1388, 11:53 صبح
سلام دوستان
من یه جدول از بانک اطلاعات رو ریختم توی دیتاست و اونو کش کردم
ولی نمیدونم چطور میتونم اونو به صورت پراکنده نمایش بدم

<%@ Application Language="VB" %>

<script runat="server">
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs on application startup
Dim con As New SqlConnection(ConfigurationManager.ConnectionStrin gs("Database").ConnectionString)
Dim str As String
Dim dad As SqlDataAdapter
Dim dst As DataSet
str = "Select * From site_data"
dad = New SqlDataAdapter(str, con)
dst = New DataSet
dad.Fill(dst, "site_data")
Context.Cache("site_data") = dst

End Sub
</script>
این جدول حاوی ستونهای site_name , site_description و ... است . من میخوام مثلاً site_name توی فوتر نمایش بدم و site_description رو توی هیدر ( مثلاً )
و نمیخوام کنترلها خودشون به صورت جدول وار این اطلاعات کش شده رو نمایش بدن
لطفاً منو راهنمای کنید
ممنون

hobab-theme
یک شنبه 31 خرداد 1388, 20:04 عصر
این جواب رو نوشتم تا این تاپیک به اول بیاد
آخه من از چندتا کتاب ریز و درشتی که دارم نتونستم در این رابطه چیزی پیدا کنم

iman_22a
یک شنبه 31 خرداد 1388, 20:38 عصر
بیشتر یا واضحتر توضیح بدید .

hobab-theme
دوشنبه 01 تیر 1388, 01:38 صبح
بیشتر یا واضحتر توضیح بدید .
ببینید من اون اطلاعات رو که تو پست اول گذاشتم از جدول site_data به دیتاست انتقال دادم و کش کردم ( کدش رو تو پست اول گذاشتم )
این جدول هم شامل ستونهایی با عناوین site_name , site_description و ... هست .
خوب با توجه به اینکه من این اطلاعات رو از طریق دیتاست کش کردم میخوام بدونم حالا چطور باید اون اطلاعات رو از کش بیرون بکشم و نمایش بدم
همین

iman_22a
دوشنبه 01 تیر 1388, 05:35 صبح
dim dst as dataset = New DataSet
dst = DirectCast(Context.Cache("site_data"),DataSet)
or
dst = CType(Context.Cache("site_data"),DataSet)

hobab-theme
سه شنبه 02 تیر 1388, 02:23 صبح
dim dst as dataset = New DataSet



dst = DirectCast(Context.Cache("site_data"),DataSet)
or


dst = CType(Context.Cache("site_data"),DataSet)

بسیار سپاسگزارم از جواب خوبتون
حالا لطفاً بگید من چطور میتونم این اطلاعات رو بصورت پراکنده نمایش بدم ( به ترتیب نباشه)
مثلاً:
فرض کنید من یه جدول HTML دارم و میخوام site_name رو تو یه سلول و site_description رو تو یه سلول دیگه نمایش بدم
دقیقاً مثل GridView که با <%#Eval("name") %> میشه هر خانه از جدول بانک اطلاات رو هرجا که دلمون خواست نمایش بدیم
ممنون

iman_22a
سه شنبه 02 تیر 1388, 10:43 صبح
خب شما یک گریدویو روی فرم بذارید که یک ستون Template داشته باشه و محتویات اون ستون رو هرطور که دوست دارید ایجاد کنید (به همین ترتیبی که مدنظرتونه) . Binding اشیاء موجود در اون رو تعریف کنین (با Eval ) دیتاسورس گریدویوتون رو برابر CType(Context.Cache("site_data"),DataSet) قرار بدین و گریدویو را DataBind() کنید.
اگر مطلبی رو فراموش نکرده باشم ، باید جواب بده .

راستی تا فراموش نکرده ام ، توی Select بجای استفاده از * ، نام ستونهایی که لازم دارین نمایش بدین رو حتما قید کنین.

hobab-theme
سه شنبه 02 تیر 1388, 16:56 عصر
خب شما یک گریدویو روی فرم بذارید که یک ستون Template داشته باشه و محتویات اون ستون رو هرطور که دوست دارید ایجاد کنید (به همین ترتیبی که مدنظرتونه) . Binding اشیاء موجود در اون رو تعریف کنین (با Eval ) دیتاسورس گریدویوتون رو برابر CType(Context.Cache("site_data"),DataSet) قرار بدین و گریدویو را DataBind() کنید.
اگر مطلبی رو فراموش نکرده باشم ، باید جواب بده .

راستی تا فراموش نکرده ام ، توی Select بجای استفاده از * ، نام ستونهایی که لازم دارین نمایش بدین رو حتما قید کنین.
ممنون . تا حدودی پیش رفتم . ولی اگر نخوام از گرید ویو استفاده کنم چی؟
اصلاً بذارید شرایطو رو براتون بیشتر توضیح بدم .
جدولی رو که در بالا با نام site_data معرفی کردم یه جدولیه که مشخصات اولیه و لازم وب سایت رو در اون ذخیره کردم . مثل نام سایت به لاتین ( مثلاً Google ) ، نام سایت به فارسی ، توضیحات ، قوانین و ...
خوب من اونا رو از تو Global.asax به کش فرستادم
حالا میخوام از نام سایت به لاتین تو فوترم برای کپی رایت استفاده کنم . از نام سایت به فارسی تو تایتل صفحه استفاده کنم . از قوانین تو صفحه قوانین استفاده کنم و ...
که البته تمام این اطلاعات رو باید از کش بیرون کشید
من در ابتدا تک تک اینا رو به کش میفرستادم از طریق کد زیر

Cach.Insert("MyItem","Value")
ولی خوب فرستادن اطلاعات به کش از طریق دیتاست نیاز به کدنویسی کمتری داره
اصلاً یه همچین امکانی هست ؟؟ آیا اگر از همون روش اولی که خودم استفاده میکردم پیش برم بهتره؟؟
ببخشید یکم طولانی شد . امیدوارم منظورم رو واضح بیان کرده باشم
یا حق

iman_22a
سه شنبه 02 تیر 1388, 17:30 عصر
سلام
بنظر من این روش خوبه (کش کردن دیتاست) ، فقط نمی دونم برای سرور سرباری اضافه ایجاد می کنه یا نه . اینو دوستانی که واردتر هستن بهتر می دونن .
اما برای اینکه اطلاعات رو از دیتاست بخونی که دیگه کاری نداره ، اطلاعاتت توی دیتاست موجودن و از این راه می تونی از اونها استفاده کنی ، برای مثال برای گرفتن متن کپی رایت فقط دیتاستتون رو از کش مثل پستهای قبلی باید نمونه سازی کنین : dst.Tables(0).Rows.Item(0).Item("Copyright")

hobab-theme
سه شنبه 02 تیر 1388, 22:24 عصر
بنظر من این روش خوبه (کش کردن دیتاست) ، فقط نمی دونم برای سرور سرباری اضافه ایجاد می کنه یا نه . اینو دوستانی که واردتر هستن بهتر می دونن .

به قول عزیزی در همین انجمن : کش کردن منابع سرور رو اشغال میکنه . ولی ما باید این هزینه را بپردازیم تا برنامه بازده بالایی داشته باشه
-------------------------
در ضمن کد زیر رو که داده بودید کار نمیکنه و خطا میگیره

) . Binding اشیاء موجود در اون رو تعریف کنین (با Eval ) دیتاسورس گریدویوتون رو برابر CType(Context.Cache("site_data"),DataSet) قرار بدین و گریدویو را DataBind() کنید.


------------------------
البته دوست من آقا ایمان عزیز این رو ذکر کنم که شما مشکل منو حل کردید . ببخشید که یادم رفت ازتون تشکر کنم . خیلی خیلی ممنونم
من این سوالها رو میپرسم واسه اطلاعات خودم
بازم ممنون
و اما ...
منظورتون از اون اعداد 0 جلوی Tables و Item چیه؟
اگه ممکنه بیشتر توضیح بدید

iman_22a
سه شنبه 02 تیر 1388, 23:25 عصر
البته دوست من آقا ایمان عزیز این رو ذکر کنم که شما مشکل منو حل کردید . ببخشید که یادم رفت ازتون تشکر کنم . خیلی خیلی ممنونم
من این سوالها رو میپرسم واسه اطلاعات خودم
بازم ممنون
و اما ...
منظورتون از اون اعداد 0 جلوی Tables و Item چیه؟
اگه ممکنه بیشتر توضیح بدید

خواهش می کنم دوست عزیز .
منظور ایندکس جداول موجود توی دیتاستتونه که چون اینجا فقط یک Table توی دیتاست دارین ، از ایندکس 0 استفاده کردم که منظور جدول مذکوره .

کجای کد جواب نمیده ؟ کدی که نوشتین بذارین تا ببینیم .

hobab-theme
چهارشنبه 03 تیر 1388, 10:30 صبح
خواهش می کنم دوست عزیز .
منظور ایندکس جداول موجود توی دیتاستتونه که چون اینجا فقط یک Table توی دیتاست دارین ، از ایندکس 0 استفاده کردم که منظور جدول مذکوره .

کجای کد جواب نمیده ؟ کدی که نوشتین بذارین تا ببینیم .
من از این کد توی گرید ویو استفاده کردم

<%#Eval (CType(Context.Cache("site_name"), DataSet))%>
آیا چیدمان این کد صحیحه . حتی تو خود VS هم خطا میگیره ( یه خط بنفش زیرش میکشه)

آپدیت : در ضمن میشه بجای استفاده از ایندکسها از نام استفاده کرد؟

iman_22a
چهارشنبه 03 تیر 1388, 10:55 صبح
من از این کد توی گرید ویو استفاده کردم

<%#Eval (CType(Context.Cache("site_name"), DataSet))%>آیا چیدمان این کد صحیحه . حتی تو خود VS هم خطا میگیره ( یه خط بنفش زیرش میکشه)

سلام ، نه به این شکل اشتباهه دوست عزیز . شما باید توی فایل Vb صفحه (Code behind) این کار رو انجام بدین :



dim dst as dataset = New DataSet
dst = CType(Context.Cache("site_data"),DataSet)
gridview1.datasource=dst
gridview1.databind()


اسامی رو هم بر اساس نام اشیاء خودتون تغییر بدین .


در ضمن میشه بجای استفاده از ایندکسها از نام استفاده کرد؟

بله میشه .

hobab-theme
پنج شنبه 04 تیر 1388, 09:47 صبح
دوست من ایمان عزیز
خیلی خیلی ممنون از همکاریت
در ضمن یه روش دیگه هم پیدا کردم برا کش کردن و نمایش تو GridView
با کنترل SqlDataSource
خیلی عالیه . به صورت خودکار اگه رکوردی اضافه بشه کش رو بروز میکنه
من که خیلی باهاش حال کردم
موفق باشید:تشویق::قلب: