PDA

View Full Version : مبتدی: چگونه دستورات را در using بگذاریم



bitcob589
یک شنبه 24 دی 1391, 17:45 عصر
با سلام
چگونه می توان دستور زیر را در using بگذاریم


publicpartialclassDefault3 : System.Web.UI.Page
{
DataClassesDataContext d = newDataClassesDataContext();
protectedvoid Page_Load(object sender, EventArgs e)
{
}
protectedvoid Button1_Click(object sender, EventArgs e)
{

Table1 tb = newTable1();
 


tb.name = TextBox1.Text;
d.Table1s.InsertOnSubmit(tb);
d.SubmitChanges()

mmd2009
یک شنبه 24 دی 1391, 21:36 عصر
با سلام

قبل از هر چیزی شما باید بدونید using چی هست که من پیشنهاد میکنم به خود MSDN مراجعه کنید و توضیحات کافی رو در اونجا ببینید که میتونید واسه دیدن توضیحاتش اینجارو (http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.100%29.aspx)کلیک کنید.

واسه دستورتون هم با توجه به توضیحات MSDN یک همچین چیزی رو میتونید استفاده بکنید :


using(DataClassesDataContext d = newDataClassesDataContext())
{
//Statement
}


موفق باشید

bitcob589
یک شنبه 24 دی 1391, 22:10 عصر
کدی که در پست یک نوشته است DataContext به صورت سراسری تعریف شده است (DataContext درون دکمه تعریف نشده است ) با توجه به توضیحات داده شده using برای پست یک به چه صورتی می توان نوشت

bitcob589
سه شنبه 26 دی 1391, 13:02 عصر
آیا کدی که در پست یک نوشته شده است را نمی توان در using گذاشت:متفکر:

govaleshgar2
چهارشنبه 27 دی 1391, 04:51 صبح
جهت اطلاع سایر کاربران این نکته رو یادآوری میکنم که کاری که using برای شما انجام میدهد این است که اطمینان حاصل میکند که در پایان یک بلاک از کد متود Dispose فراخوانده خواهد شد(حتی اگر خطایی(Exception) رخ داده باش)

در واقع دستور using عملاً یک try/catch است که در قسمت catch متود Dispose فراخوانده میشود و exception دوباره throw میشود.

با توجه به این توصیفات، شما دستور using را فقط در یک block از کد میتوانید استفاده کنید بلاک را شاید بشود مجموعه ای از دستورات متوالی تعریف کرد. اما در مقابل یک صفحه Asp.Net کلاً چرخه حیات پیچیده تری از این حرفها داره و کدهایی که شما در جای جای آن به عنوان فیلد مینویسید و یا به عنوان handler متودهای مختلف مینویسید لزوماً پشت سر هم اجرا نمیشوند و هر متودی در زمان خاص خودش اجرا میشود. پس حتی این یک محدودیت زبان سی شارپ نیست. بلکه اساساً نمیتوان مفهومی مانند using را در سطح یک صفحه Asp.Net (یا حتی یک فرم Windows Forms یا WPF ) اعمال کرد.

اما چه باید کرد؟
به هر روی، آنچه شما نیاز دارید بدانید به طور خلاصه این است که شما نمیتوانید کد فوق را در using بگذارید. اما میتوانید هدف مورد نظر از using را تامین کنید:
1- راه نخست این است که متود Dispose را در زمان مناسب فراخوانی کنید. احتمالاً بهترین گزینه بعد از فراخوانی متود d.SubmitChanges است- البته اگر d دیگر مورد استفاده قرار نگرفته باشد. یک گزینه دیگر در هنگام پایان کار صفحه است یعنی در Unload صفحه. البته لازم است که اطمینان حاصل کنید که وقتی صفحه شما چرخه حیاتش رو کامل کرد متود Dispose فراخوانی شده است.
2- به جای اینکه فیلد d را تعریف کنید آن را در داخل متود Button1_Click تعریف کنید در این صورت میتوانید از دستور using استفاده کنید.