PDA

View Full Version : سؤالاتي در مورد Custom Profile Provider



bftarane
پنج شنبه 10 فروردین 1391, 22:00 عصر
سلام.
سؤالاتي در مورد Custom Profile Provider دارم.
1. آيا پراپرتي هايي که در web.config در قسمت profile بخش Properties اضافه مي کنيم بايد به ازاي هر کدام
يه فيلد در يک جدول ايجاد کنيم؟

مثلاً فرض کنيد داريم:

<properties>
<add name="Favourites"/>
<add name="Age" type="System.Int32"/>
</properties>
آيا براي Age بايد يه فيلد ايجاد کنيم؟
من از دو لينک زير براي ايجاد کاستوم پروفايل پروايدر دارم استفاده ميکنم
http://msdn.microsoft.com/en-us/library/ta63b872.aspx
http://msdn.microsoft.com/en-us/library/8zs47k7y.aspx
اين رو با توجه به اون Zipcode وStockSymbol که در لينک دوم دو فيلد در دو جدول براشون درست کرده مي گم.


سوال بعدي اينه که چطوري در مثلاً رويداد کليک بايد به اين پراپرتي ها دسترسي پيدا کنيم؟
مثلاً من وقتي از خود پروفايل پروايدر Asp.net استفاده کرده بودم از اين کدها استفاده کرده بودم:

Label2.Text = Profile.Favourites;
Label3.Text=Profile.Age.ToString();
ولي در مورد کاستوم پروفايل پروايدر اين کار رو چه جوري ميشه انجام داد؟

ممنون از هر کي جواب بده.

fakhravari
جمعه 11 فروردین 1391, 01:21 صبح
<profile defaultProvider="SqlProvider">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="LocalSqlServer1"/>
</providers>
<properties>
<add name="BirthYear" type="String"/>
<add name="Sokonat" type="String"/>
<add name="Website" type="String"/>
<add name="ICQ" type="string"/>
<add name="HotmailID" type="String"/>
<add name="SkypeName" type="String"/>
<add name="AIM" type="String"/>
<add name="YahooID" type="String"/>
<add name="Signature" type="String"/>
<add name="MSN" type="String"/>
</properties>
</profile>
<profile defaultProvider="customizedprofileprovider" enabled="true">
<providers>
<clear/>
<add name="customizedprofileprovider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ConnectionString1" applicationName="/" description=""/>
</providers>
<properties>
<add name="Name" type="String"/>
<add name="Family" type="String"/>
<add name="Address" type="String"/>
<add name="Image" type="String"/>
<add name="Sen" type="String"/>
<add name="Email" type="String"/>
<add name="YahooID" type="String"/>
</properties>
</profile>

Profile.Name = txtname.Text;
Profile.Sen = txtsen.Text;
Profile.YahooID = txtyahooid.Text;
Profile.Image = this.User.Identity.Name + ".jpg";

Profile.Save();

dorparasti
جمعه 11 فروردین 1391, 02:18 صبح
توی اون لینک ها اومده و یک ساختار متفاوت از ساختار عادی asp.ntet برای ذخیره پروفایل ایجاد کرده که توی اکسس هم ساخته شده . برای همین سردرگم کننده شده .

اما شما اگر می خوای از دیتابیس پیش فرض Aspnetdb و از membership خود asp.net استفاده کنی که اصلن نیازی به دونستن این جزئیات نداری بلکه با استفاده از خود کلاس های membership و profile ، این ها همش مدیریت میشه طبق مثال بالای دوستمون .
اما اگه داری یک ساختار کاملا متفاوت رو ایجاد می کنی که دیگه دست خودته چطور دیتابیس و جداول رو طراحی کنی .

برای دسترسی به اطلاعات درون پروفایل در برنامه هم ، چون در .net از الگوی provider ها استفاده میشه مهم نیست که کلاست چیه ( پیش فرض دات نت یا custom ) همین که بر اساس interface های تعیین شده باشه کفایت می کنه و در همه حالات نحوه دسترسی مشابه هم هستش .

توی همون لینکهایی که گذاشتی درباره نیاز به طراحی یک Custom Profile provider توضیح داده که :


The ASP.NET profile feature enables you to easily use different providers. You can use the SqlProfileProvider (http://msdn.microsoft.com/en-us/library/system.web.profile.sqlprofileprovider.aspx) class that is included with the .NET Framework or you can implement your own provider.
You create a custom profile provider when:


You need to store profile information in a data source, such as in a FoxPro database or in an Oracle database, that is not supported by the profile providers included with the .NET Framework.
You need to manage profile information using a database schema that is different from the database schema used by the providers included with the .NET Framework. A common example is that you want to integrate profile information with user data in an existing SQL Server database.

dorparasti
جمعه 11 فروردین 1391, 02:34 صبح
این لینک (http://dorparasti.ir/?p=84) رو هم بررسی کن . برای نحوه کار با پروفایل و ممبرشیپ کلن .

bftarane
جمعه 11 فروردین 1391, 11:26 صبح
ممنون دوستان. من با طريقه کار با سيستم پروفايل خود دات نت رو بلدم و ازش استفاده کردم من هدفم از استفاده از کاستوم پروفايل پروايدر اينه که مي خوام اطلاعات در جدولي که خودم درست کردم وارد بشن نه جدول پروفايل پيش فرض.

خوب من با يه خطا مواجه شدم که در زير مي بينيد
84895
کدهاي زير مربوط به قسمت پروفايل هست در web.config

<profile defaultProvider="OdbcProfileProvider">
<providers>
<clear/>
<add
name="OdbcProfileProvider"
type="Samples.AspNet.Profile.OdbcProfileProvider"
connectionStringName="mycs" />
</providers>

<properties>
<add name="ZipCode"
allowAnonymous="true" />

<add name="StockSymbols"
type="System.Collections.ArrayList"
allowAnonymous="true" />
<add name="Description"/>
<add name="Favourites"/>
<add name="Age" type="System.Int32"/>
</properties>
</profile>
اينا رو هم در رويداد لود صفحه نوشتم

TextBox1.Visible = false;
TextBox2.Visible = false;
TextBox3.Visible = false;
Label1.Text = Profile.Description;
Label2.Text = Profile.Favourites;
Label3.Text=Profile.Age.ToString();
اما متأسفانه کار به لود صفحه نمي رسه و با پيغام خطاي بالا مواجه مي شم.
من فايل رو هم ضميمه مي کنم اگه ممکنه نگاهي بندازيد ببينيد ايرادش چيه.

اين که در حد يک امتحان و ياد گرفتن کار با کاستوم پروفايل پروايدر هست. من يه فروشگاه کوچک که براي کارت خريدش از پروفايل خود Asp.net استفاده مي کنه دارم که به خوبي کار مي کنه حالا مي خوام از جداول خودم استفاده کنم نه Asp.net به خاطر همين دارم روي اين موضوع کار مي کنم. خيلي برام مهمه.
ممنون.
http://barnamenevis.org/images/misc/pencil.png


توی اون لینک ها اومده و یک ساختار متفاوت از ساختار عادی asp.ntet برای ذخیره پروفایل ایجاد کرده که توی اکسس هم ساخته شده . برای همین سردرگم کننده شده .

برای دسترسی به اطلاعات درون پروفایل در برنامه هم ، چون در .net از الگوی provider ها استفاده میشه مهم نیست که کلاست چیه ( پیش فرض دات نت یا custom ) همین که بر اساس interface های تعیین شده باشه کفایت می کنه و در همه حالات نحوه دسترسی مشابه هم هستش .



1. من به اين که بانکش اکسس هست توجه داشتم و به Sql تبديل کردم.
2. يعني لازم نيست من يه همچين چيزي بنويسم؟

OdbcProfileProvider myprofile =(OdbcProfileProvider)Profile.Providers["OdbcProfileProvider"];
يعني لازم نيست يه شي جديد از کلاس کاستوم پروفايل پروايدر درست کنم؟ (چون من قبلاً يه Custom membership provider با کمک همين سايت msdn درست کرده بودم و کار هم مي کرد و در رويداد کليک باتن ثبت نام کاربر اين کد رو نوشته بودم
CustomMembershipProvider cmp = (CustomMembershipProvider)Membership.Providers["CustomMembershipProvider"];

cmp.CreateUser(txtusername.Text,)
الآن به فکرم رسيد شايد بايد همچين کاري کرد ولي وقتي در رويداد لود خط بالا رو نوشتم و خواستم به صورت زير
myprofile.Age به Age دسترسي پيدا کنم Age رو نشناخت.

dorparasti
جمعه 11 فروردین 1391, 16:02 عصر
طرز ساختت درسته . اما شما در web.config علاوه بر دو فیلد zipcode و stocksymbols یک سری property دیگه هم اضافه کردید مثل favorites و age و ... درحالی که در custom provider برای اونا توابع لازم رو ننوشتی ( و در دیتابیس هم فیلدی براشون نساختی ) ولی در صفحه profile.aspx بهشون ارجاع دادی . سیستم هم ایراد گرفته .

اگه متوجه منظورم نشدی بگو تا جزییات بیشتری بگم .

در مورد سوالت هم باید بگم نه نیازی نیست چون همونطور که گفتم چون قواعد مربوط به یک profile provider رو رعایت کردی می تونی مثل حالت عادی با کد Profile.Age یا ... به مقادیر دسترسی داشته باشی .