PDA

View Full Version : سوال: نوشتن Query در CS



fozolefozola
سه شنبه 22 دی 1388, 10:58 صبح
سلام

من مي خوام اين كد رو كه به صورت ويزارد توليد شده رو به CS تبديل كنم ولي هر كاري كردم نشد
مي تونيد كمك كنيد




<SelectParameters>
<asp:QueryStringParameter Name="tid" QueryStringField="news4" Type="Int32" />
</SelectParameters>

Mostafa_Dindar
سه شنبه 22 دی 1388, 11:24 صبح
سلام .
اول شما بگو چرا ميخواي اينكار رو بكني ؟ اگر هدف شما اعمال كارهاي متفاوت بسته به نوع QueryString هست ميتوانيد در رويداد لود به صورت زير عمل كنيد :

RefreshButton();
if (Request.QueryString["ArticleId"] != null)
{
int ArticleId = Convert.ToInt32(Request.QueryString["ArticleId"]);
Articles a = ArticlesManager.SelectSingleItem(ArticleId);
SetObjectToForm(a);
}

اگر هدف شما تغير مقدار پارامتر قبل از اسال هست شما مشخص نكردي از چه DataSource اي استفاده ميكني ؟
اگر ObjectDataSource هست ميتوني در رويداد Selecting اون مقدار پارمتر رو تغير و هر كار ديگه اي انجام بدي . SqlDataSource هم بايد همچين رويدادي داشته باشد .

موفق باشيد

fozolefozola
پنج شنبه 24 دی 1388, 14:14 عصر
من در صفحه 1 يك لينك دارم كه توي آدرس دهي بصورت زير بهش آدرس دادم


'<%#Eval("tid","news0.aspx?news4id={0}") %>'



كه وقتي به صفحه دوم ميره Repeater رو نمايش ميده كه با كانكشن زير وصل شده به ديتابيس و يكمي مشكلات ايجاد كرده
اگر با زبان CS ميشد همين كوئري و نوشت مي تونستم تغييرات ديگه رو بهش بدم



<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:refConnectionString %>"
SelectCommand="SELECT * FROM [Index] WHERE ([tid] = @tid)">
<SelectParameters>
<asp:QueryStringParameter Name="tid" QueryStringField="news4" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>


من از كد بالا كه برام نوشتين سر در نيوردم
ArticleId همون news4 كه من بكار برم؟
و نام فيلدم و كجا بايد بنويسم؟
اگر ممكنه با يه كانكشن و .... بزاريد تا كامل كدها رو ببينم
يعني به فرمان SQl ربط نداره

Mostafa_Dindar
پنج شنبه 24 دی 1388, 14:41 عصر
من در صفحه 1 یک لینک دارم که توی آدرس دهی بصورت زیر بهش آدرس دادم


'<%#Eval("tid","news0.aspx?news4id={0}") %>'

که وقتی به صفحه دوم میره Repeater رو نمایش میده که با کانکشن زیر وصل شده به دیتابیس و یکمی مشکلات ایجاد کرده
اگر با زبان CS میشد همین کوئری و نوشت می تونستم تغییرات دیگه رو بهش بدم



<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:refConnectionString %>"
SelectCommand="SELECT * FROM [Index] WHERE ([tid] = @tid)">
<SelectParameters>
<asp:QueryStringParameter Name="tid" QueryStringField="news4" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>من از کد بالا که برام نوشتین سر در نیوردم
ArticleId همون news4 که من بکار برم؟
و نام فیلدم و کجا باید بنویسم؟
اگر ممکنه با یه کانکشن و .... بزارید تا کامل کدها رو ببینم
یعنی به فرمان SQl ربط نداره

ببین دوست من . تا شما شفاف توضیح ندی که کسی نمیتونه کمک کنه .

اگر شما میخواهید بدون استفاده از SqlDataSource خودتون با توجه به QueryString مقدار دریافت کنید باید مراحل زیر را پیش برید :

یک متد بنویسید که یک پارامتر از نوع Int داشته باشه و رکودهای متاسب با اون رو برگردونه .
فرض میکنیم شما یک متد برای اینکار نوشته اید و نام آن را GetNewsList نامیده اید .

خوب حالا که متد مورد نظر را دارید . تنها یک Repeater در فرم قرار دهید . ( در این حالت نیازی به Sql یا ObjDataSource ندارید) در رویداد لود صفحه پارامتر QueryString را بگیرید و به متد مورد نظر پاس دهید .

protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["NewsId"] != null)
{
Repeater1.DataSource = GetNewsList(Convert.ToInt32(Request.QueryString["NewsId"]));
Repeater1.DataBind();
}

else
lblDescription.Text = "هیچ رکوردی متناسب با درخواست شما یافت نشد ";
}

fozolefozola
پنج شنبه 24 دی 1388, 15:14 عصر
نه عزيز بازم نگرفتيد من چي ميگم
من يك رپيتر در صفحه اولم دارم كه شامل چند لينك مي باشد.
كه اين لينكها كارشون اينكه مقدار رو از ديتابيس مي گيرن و به صفحه دو انتقال ميدن
كد زير داخل ريپيتره و اين كد در قسمت Source نوشته شده


<asp:HyperLink ID="HyperLink2" runat="server" Text='<%#Eval("ITitr")%>' NavigateUrl='<%#Eval("tid","news0.aspx?news4id={0}") %>' Font-Underline="False" ForeColor="#3399FF"></asp:HyperLink>


و بعد در صفحه دو كه مشكلم اينجاست مقدار و مي گيره و فقط اونا رو نشون مي ده
يعني فقط ID كه براش فرستاده شده
مثل فقط خبر شماره 1 رو از بين خبرها نشون ميده و تا الان كاملا درست كار ميكنه
http://localhost:39040/web01/news0.aspx?news4id=1
اسم صفحه news0.aspx و QueryStringField برابر news4id

در كد زير كانكشن و گوئري و من تعريف كردم چون به صورت ويزارد انجام دادم اين كدها رو باز هم داخل Source نوشته و من فقط مي خوام كد زير رو با كانكشن و هر چيزي كه توش ميبيني مثل خودش داخل CS بنويسم

به صورتي كه الان هست و آي دي رو از صفحه اول مي خونه
فكر كنم بشه؟ نه؟



<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:refConnectionString %>"
SelectCommand="SELECT * FROM [Index] WHERE ([tid] = @tid)">
<SelectParameters>
<asp:QueryStringParameter Name="tid" QueryStringField="news4" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>




ممنون كه به سوالاتم جواب ميديد

Mostafa_Dindar
پنج شنبه 24 دی 1388, 15:38 عصر
و بعد در صفحه دو که مشکلم اینجاست مقدار و می گیره و فقط اونا رو نشون می ده
یعنی فقط ID که براش فرستاده شده

یعنی میخواین بیشتر از یک رکورد رو نشون بده ؟خوب هر چند تا رکورد پیدا کنه نشون میده . اگر tid شناسه باشه طبیعی هم هست یک رکورد نشون بده . کجای این کار مشکل دار بود ؟



در کد زیر کانکشن و گوئری و من تعریف کردم چون به صورت ویزارد انجام دادم این کدها رو باز هم داخل Source نوشته و من فقط می خوام کد زیر رو با کانکشن و هر چیزی که توش میبینی مثل خودش داخل CS بنویسم

من این "مثل خودش" رو متوجه نشدم . این Source منظورتون SqlDataSource هست یا فایل .aspx یا aspx.cs
چون وقتي كه بصورت ويزارد يك كنترل داده رو به ديتاسورس بايند ميكنيد كه چيزي داخل فايلCS ايجاد نميكنه !!؟



ممنون که به سوالاتم جواب میدید

خواهش میکنم . لطفا بیشتر توضیح دهید .

fozolefozola
یک شنبه 27 دی 1388, 20:32 عصر
من كه چيز مبهمي نمي گم
من فقط مي خوام اين كد به Cs تبديل بشه يعني نمي خوام ويزاردي باشه
ميشه يا نه؟



<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:refConnectionString %>"
SelectCommand="SELECT * FROM [Index] WHERE ([tid] = @tid)">
<SelectParameters>
<asp:QueryStringParameter Name="tid" QueryStringField="news4" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>

Mostafa_Dindar
یک شنبه 27 دی 1388, 20:38 عصر
من که چیز مبهمی نمی گم
من فقط می خوام این کد به Cs تبدیل بشه یعنی نمی خوام ویزاردی باشه
میشه یا نه؟



<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:refConnectionString %>"
SelectCommand="SELECT * FROM [Index] WHERE ([tid] = @tid)">
<SelectParameters>
<asp:QueryStringParameter Name="tid" QueryStringField="news4" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>



بله میشه . نکنه در همین مشکل داری ؟ در پست دوم كه اينو گفتم .

fozolefozola
یک شنبه 27 دی 1388, 21:12 عصر
بله میشه . نکنه در همین مشکل داری ؟ در پست دوم که اینو گفتم .

بله گفتید دستتون درد نکنه ولی من متوجه نشدم باید چکار کنم
تو صفحه اول یا صفحه دوم کدهای بیشتری و گذاشتم که بهتر بتونید بهم بفهمونید

دقیقا اگر بگید کجا باید بذارم
و اگر یه تیکه داخل ASP هست و یک تیکه تو CS میشه

fozolefozola
یک شنبه 27 دی 1388, 21:16 عصر
فكر ميكنم كدي كه شما دادي توي پست 2 براي قسمت اول سوالم بود يعني جايي كه مي خونه

ولي اين قسمت و بهم نگفتيد



<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:refConnectionString %>"
SelectCommand="SELECT * FROM [Index] WHERE ([tid] = @tid)">
<SelectParameters>
<asp:QueryStringParameter Name="tid" QueryStringField="news4" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>


شرمنده مزاحمتون شدم ببخشيد

Mostafa_Dindar
یک شنبه 27 دی 1388, 21:37 عصر
protected void Page_Load(object sender, EventArgs e)
{
//برسی میشود که آیا همراه با درخواست صفحه کوئری استرینگ هم پاس داده شده یانه ؟
if (Request.QueryString["news4id"] != null)
{
//فرض میکنیم کوئری استرینگ پاس داده شده قابل تبدیل به نوع عددی باشد
int param1 = Convert.ToInt32(Request.QueryString["news4id"]);
Repeater1.DataSource = GetAppropriateRecordsinDataSet(param1);
Repeater1.DataBind();
}
}
/// <summary>
/// کوئری متناسب به پارامتر را به صورت "دیتا ست برمیگرداند در غیر اینصورت "نال " برمیگرداند
/// </summary>
/// <param name="param1">یک پارامتر</param>
/// <returns>DataSet</returns>
private object GetAppropriateRecordsinDataSet(int param1)
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["LocalSqlServer"].ConnectionString))
{
// بهتره که کوئری رو داخل یک رویه ذخیره شده بنویسید ولی من فعلا اینجا نوشتم که توصیه نمیشه
string Query = string.Format("select * from Table1 where Id = {0} or some other where condition", param1);
DataSet ds = new DataSet();
SqlDataAdapter adp = new SqlDataAdapter(Query , con);
adp.Fill(ds, "NewsTable");
return ds;
}
}

از اونجايي كه من اصلا از ديتاست استفاده نميكنم و همچنين هميشه از StoredProcedure استفاده ميكنم صدرصد مطمئن نيستم كه اين كد كار كنه . ولي درست به نظر ميرسه .

fozolefozola
یک شنبه 27 دی 1388, 21:51 عصر
فكر نميكنم اينطوري باشه

تستش ميكنم

ممنون

Mostafa_Dindar
یک شنبه 27 دی 1388, 22:02 عصر
فکر نمیکنم اینطوری باشه

تستش میکنم

ممنون

اگر درست نبود . كدت رو برام بفرست تا درست كنم .

موفق باشي

fozolefozola
سه شنبه 29 دی 1388, 08:36 صبح
از این کد ایراد میگیره


ConnectionStrin.gs

fozolefozola
سه شنبه 29 دی 1388, 09:43 صبح
سلام

توي يه پروژه كاري و كه مي خوام بصورت ويزاردي انجام دادم
لطف كنيد يه نگاه بندازيد ممنون ميشم

http://fozolefozola.persiangig.com/project.rar

fozolefozola
پنج شنبه 08 بهمن 1388, 02:19 صبح
دستتون درد نكنه تونستم درستش كنم

فقط از اين خط استفاده كردم


id = Convert.ToInt32(Request.QueryString["weblist"].ToString());