PDA

View Full Version : بررسی سوالات و نظرات "پروژه سی شارپ از ابتدا تا انتها"



veniz2008
یک شنبه 03 شهریور 1392, 11:04 صبح
سلام دوستان.
طبق قولی که در رابطه با قرار دادن آموزش های مربوط به "ساخت یک پروژه سی شارپ از ابتدا تا انتها" داده بودم این ویدئوها رو میتونید از آدرس زیر دانلود کنید.
http://barnamenevis.org/showthread.php?415427-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%88%DB%8C%D8%AF%D8%A6%D9%88%DB%8C%DB%8C-%DB%8C%DA%A9-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-%D8%A7%D8%B2-%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7-%D8%AA%D8%A7-%D8%A7%D9%86%D8%AA%D9%87%D8%A7
اما تصمیم گرفتم برای اینکه نظم اون تاپیک بهم نخوره، این تاپیک رو برای رسیدگی به مشکلات شما در ارتباط با این آموزش ها ایجاد کنم. برای بازدهی بیشتر این تاپیک، لطفا به موارد زیر توجه بفرمایید:
1. فقط در محدوده آموزش هایی که قرار داده میشه سوالات یا اشکالات خودتون رو مطرح بفرمایید و از پرسیدن سوالات بی ارتباط با بحث آموزش ها جدا" پرهیز کنید.
2. از گذاشتن پست هایی برای تشکر جدا" خودداری کنید. اجازه بدیم پست هایی اینجا گذاشته بشه که محتوای فنی داشته باشه.
3. لطفا از گذاشتن پست تکراری و فاقد محتوا پرهیز کنید و قبل از گذاشتن یک پست، ابتدا بقیه پست ها رو مشاهده کنید. شاید جواب سوالتون در اون پست قرار داشته باشه.
توصیه میکنم با دیدن هر ویدئو، بعد از پرسیدن سوالات و ابهامات خودتون بصورت عملی شروع به طراحی یک پروژه کنید و قدم به قدم با اموزش ها جلو بیاید(شبیه به مواردی که در آموزش ها می بینید). شک نکنید که تا شروع به نوشتن نکنید چیزی رو یاد نمیگیرید. خیلی ها هستن که اگه ازشون بپرسید میگن که ما کدها و دستورات رو بلدیم ولی نمیتونیم پروژه بنویسیم. دلیلش اینه که هیچوقت استارت کار رو بصورت عملی نزدن. تا عملی کار نکنید هرگز موفقیتی حاصل نمیشه.
یادمون نره که شرط موفقیت، فکر کردن، ایده داشتن و تلاش کردن هست.
توجه : در طول ضبط هر ویدئو اگر موردی فراموش شده که ذکر بشه، در ابتدای ویدئوی بعدی این موارد ذکر شده.
پیشاپیش از همکاری همه شما دوستان، قدردانی میکنم.

esafb52
یک شنبه 03 شهریور 1392, 14:13 عصر
با سلام وخسته نباشید
چون فرمودید مخاطبان این آموزش افراد سطح متوسط هم هستند پیشنهادم این هست که به صورت سه لایه پیاده سازی بشه من قسمت اول رو دیدم خوب بود
موفق باشید

veniz2008
یک شنبه 03 شهریور 1392, 14:28 عصر
با سلام وخسته نباشید
چون فرمودید مخاطبان این آموزش افراد سطح متوسط هم هستند پیشنهادم این هست که به صورت سه لایه پیاده سازی بشه من قسمت اول رو دیدم خوب بود
موفق باشید
سلام دوست عزیزم.
ممنونم از اینکه اولین نظر رو شما دادید.
این ویدئوها بصورت کامل آماده شدن ولی در ارتباط با پیشنهادتون :
هدف اصلی این آموزش ها مخاطبان مبتدی هست و تلاش میشه که این مخاطبان تا حد متوسطی از لحاظ کدنویسی بالا کشیده بشن.
باور بفرمایید اگر برای یک مبتدی که هنوز با مفاهیم آشنا نیست من برم سراغ چند لایه نوشتن، چیزی رو یاد نخواهد گرفت. چند لایه آموزش دادن برای کسانی مفید خواهد بود که با مباحث اولیه آشنایی دارند.

سلام دوست عزیز
من مخالف همچین آموزش هایی هستم چون عقیده دارم افراد برای یادگیری برنامه نویسی باید مطالعه کنن کلاس برن وتمرین داشته باشن مثل خود ما...
یکی از اشکالات ما بچه های کامپیوتر همین مسئله هست که علم مون رو همینطوری در اختیار دیگران قرار می دیم .
ارزش کارمون کم می شه. وبازار رو از دست می دیم برنامه نویسی باید در اختیار متخصص باشه یعنی یه مهندس نرم افزار،شما تا حالا دیدید یه مکانیک مطب بزنه وبیمار ببینه...
اینجا ماباید به هم رشته ای های خودمون کمک کنیم ومشکلاتشون رو رفع کنیم
سلام دوست من.
ممنونم که نظر دادید.
نظر من متفاوت با نظر شما هست.
عقیده و باور من این هست که هر کس با توجه به امکاناتی که در اختیار داره باید به دیگران کمک کنه.
اگر این ویدئوها بتونه حتی به یک نفر چیزی رو یاد بده، اون لحظه، لحظه ای هست که من به هدفم رسیدم.
این ویدئوها فقط یک نقطه شروع خواهد بود برای کسانیکه واقعا قصد یادگیری دارند ولی امکاناتش رو ندارند. بقیش به تلاش و پشتکار خودشون مربوط میشه.
همین چند روز پیش توی بخش "گفتگو با مسولین سایت" یه نفر تاپیک گذاشته بود و میگفت که دوس داره یاد بگیره ولی پول نداره. از این جور آدم ها زیاد هست دوست من.
اگر قراره نون شب من با این 16 ویدئو قطع یا کم بشه، همون بهتر که بشه. این آموزش ها حتی 1 درصد از زبان سی شارپ هم نیستن.
یاد دادن و یاد گرفتن دو فرآیند هم روند و موازی هستن. من همزمان که دارم به دیگران یاد میدم در کنارش دارم از دیگران یاد می گیرم.
من همیشه گفتم : در کنار پشتکار خودم، برنامه نویس به من کمک کرده تا بزرگ بشم. اخلاق حکم میکنه که امروز من به دیگران کمک کنم. انصاف نیست که الان یه خورده یاد گرفتم نسبت به دیگران بی تفاوت باشم.
به هر حال، هرکس به یک شکل کمک میکنه ولی ثابت شده که آموزش های مالتی مدیا تاثیرگذاری خیلی بیشتری دارند.
بازم از اینکه نظرتون رو دادید تشکر میکنم.

esafb52
یک شنبه 03 شهریور 1392, 17:00 عصر
هدف اصلی این آموزش ها مخاطبان مبتدی هست و تلاش میشه که این مخاطبان تا حد متوسطی از لحاظ کدنویسی بالا کشیده بشن.
باور بفرمایید اگر برای یک مبتدی که هنوز با مفاهیم آشنا نیست من برم سراغ چند لایه نوشتن، چیزی رو یاد نخواهد گرفت. چند لایه آموزش دادن برای کسانی مفید خواهد بود که با مباحث اولیه آشنایی دارند.
موافقم !!من تشکر میکنم از نوع نگاه تون هرچند که من فقط برای دلم و بخاطر یادگیری و علاقه بیش از حد به کامپیوتر ایناها رو یاد میگیرم
ضمنا این پروژه اولین نمونه پروژه ای هست که از دیتابیس های مرتبط درون اون استفاده شده یا حداقل من میبینم چون تا حالا هرچی که دانلود کردم از پروژه هایی بوده که دیتابیس ها از جداول مرتبط نبوده که در نوع خودش حرکت جدیدی هست
موفق باشید

amir200h
دوشنبه 04 شهریور 1392, 02:07 صبح
در مورد حذف کردن گروه های درسی که فرمودین نیاز به حذف نیست. من با این حرفتون مخالفم.
توی یک برنامه برای هر جدولی که ساخته میشه باید چهار عمل اصلی رو در برنامه براش ایجاد کنیم. البته نظر شخصیمه و تو صد در صد پروژه هام برای کاربر این امکانو فراهم میکنم.
البته نوع حذف کردن قضیه ش فرق میکنه چون ممکنه با یک حذف کردن حتی یک رکورد کل برنامه از کار بیوفته(در بعضی موارد) مخصوصا در زمان گزارش گیری و جستجو به مشکل بر بخوریم.
من خودم معتقدم که هیچ رکوردی نباید از بانکمون حذف بشه چون به نظرم ذات پایگاه داده که همون ذخیره داده هاست زیر سوال میره.(نظر شخصیمه و میدونم هم که در بعضی موارد صحیح نیست)
من خودم همیشه برای جداولم یک فیلد به نام State تعریف میکنم از نوع bit. و با true یا false کردن این مقدار در واقع همون عمل حذف رو انجام میدم.
موفق باشید ...

amir200h
دوشنبه 04 شهریور 1392, 02:37 صبح
گفتن به علت کم بود وقت و اینکه دل بخواه هستش البته موافقم باید برای admin در نظر گرفت بشه
حالا چرا بیت ؟با همون id همیشه انجام میشه شما دلیلی دارین؟

راحتی کار. اگه مقدارش true بود یعنی فعال و اگه false بود یعنی غیرفعال یا همون حذف شده

asrah6
دوشنبه 04 شهریور 1392, 09:48 صبح
سلام و تشکر فراوان از آموزشهای جنابعالی انشاالله به امید روزی که هیچ کس در امر آموزش به دیگران خسیس نباشد
چند پیشنهاد :
اگر امکان دارد جدولی اضافه کنید که جوابهای کاربران( آزمون دهنده ها ) را ذخیره تا در گزارش گیری های بعدی و مقایسه نمرات آنها استفاده شود و همچنین فیلدی به جدول گروه های امتحانی اضافه کنید تا مدیر بتواند از بین چندین گروه امتحانی یکی را برای امتحان دادن کاربران فعال کند و همه گروههای امتحانی نمایش داده نشود
در پایان باز هم تشکر و اگر امکان دارد ویدئوهای بعدی را سریعتر آماده و آپلود نمایید.:تشویق:

veniz2008
دوشنبه 04 شهریور 1392, 10:53 صبح
در مورد حذف کردن گروه های درسی که فرمودین نیاز به حذف نیست. من با این حرفتون مخالفم.
توی یک برنامه برای هر جدولی که ساخته میشه باید چهار عمل اصلی رو در برنامه براش ایجاد کنیم. البته نظر شخصیمه و تو صد در صد پروژه هام برای کاربر این امکانو فراهم میکنم.
البته نوع حذف کردن قضیه ش فرق میکنه چون ممکنه با یک حذف کردن حتی یک رکورد کل برنامه از کار بیوفته(در بعضی موارد) مخصوصا در زمان گزارش گیری و جستجو به مشکل بر بخوریم.
من خودم معتقدم که هیچ رکوردی نباید از بانکمون حذف بشه چون به نظرم ذات پایگاه داده که همون ذخیره داده هاست زیر سوال میره.(نظر شخصیمه و میدونم هم که در بعضی موارد صحیح نیست)
من خودم همیشه برای جداولم یک فیلد به نام State تعریف میکنم از نوع bit. و با true یا false کردن این مقدار در واقع همون عمل حذف رو انجام میدم.
موفق باشید ...
ممنونم از اینکه نظرتون رو دادید.
همونطور که در ویدئو هم عرض کردم میشد گذاشت و بهتر هم هست که در یک پروژه واقعی این امکان هم اضافه بشه ولی باید مواظب مدیریت کردن حذف در جداول مبدا باشیم. مثلا در هیمن مثال ما، باید این رو مد نظر داشته باشیم که اگر از جدول گروه، رکوردی حذف بشه بایستی در جدول سوالات هم، رکوردها(سوالاتی) که وابسته به این گروه هستن رو هم حذف کنیم. در کل با این نظرتون موافقم که میشد این مورد رو هم اضافه کرد ولی بخاطر اینکه در فرم سوالات این مورد بصورت کامل پیاده سازی میشه و ویدئوهای اولیه هم وقت گیر نشه از گذاشتن این امکان خودداری کردم.
اما در مورد اینکه گفتید اعتقاد دارید هیچ رکوردی رو حذف نکنیم، به نظرم صحیح نیست. ما با توجه به شرایط پروژه و نوع جداولمون این حذف رو قرار میدیم. مثلا در سیستم بایگانی ما معمولا هیچوقت سندی رو حذف نمی کنیم چون بایگانی اسمش به خودش هست ولی میتونیم از همین فیلد bit ای که شما گفتید استفاده کنیم و رکوردهای خیلی قدیمی رو (بر حسب یک شرط مثلا سال) غیر فعال کنیم. ولی در جاهایی که نیازی به این ذخیره سازی نیست بهتره که رکوردها رو حذف کنیم تا بیهوده فضای اضافی اشغال نکنه و بر روی performance دیتابیس تاثیر منفی نذاره.

سلام و تشکر فراوان از آموزشهای جنابعالی انشاالله به امید روزی که هیچ کس در امر آموزش به دیگران خسیس نباشد
چند پیشنهاد :
اگر امکان دارد جدولی اضافه کنید که جوابهای کاربران( آزمون دهنده ها ) را ذخیره تا در گزارش گیری های بعدی و مقایسه نمرات آنها استفاده شود و همچنین فیلدی به جدول گروه های امتحانی اضافه کنید تا مدیر بتواند از بین چندین گروه امتحانی یکی را برای امتحان دادن کاربران فعال کند و همه گروههای امتحانی نمایش داده نشود
در پایان باز هم تشکر و اگر امکان دارد ویدئوهای بعدی را سریعتر آماده و آپلود نمایید.:تشویق:
سلام دوست من.
همونطور که در پست 4 هم عرض کردم این ویدئوها بصورت کامل آماده شدن و متاسفانه امکان تغییری وجود نداره.
قطعا در یک پروژه واقعی باید چنین موردی رو قرار داد ولی این پروژه قرار نیست کاملا واقعی باشه. ساخت یک پروژه واقعی بصورت مالتی مدیا باور کنید ساعت ها بیشتر از اون چیزی که تا به امروز وقت گذاشتم، وقت میبره. همین 16 ویدئو فکر کنم حدود 20 ساعت زمان برده که اگر قرار بر کامل بودن اون داشتم حداقل به 20 ساعت دیگه هم زمان نیاز بود که فکر میکنم خارج از حوصله مخاطب باشه.
ولی در کل عجله نکنید. خواهید دید که ویدئو به ویدئو مطالب سطحشون بالاتر خواهد رفت و مطالب گسترده تر و حرفه ای تری رو یاد خواهید گرفت. سعی شده که آروم آروم ذهن شما به مطالب عادت کنه.
در مورد قرار دادن ویدئوها سعی میکنم این کار رو سریعتر انجام بدم ولی اینترنت کشورمون رو که بهتر از من می شناسید. سرعت اینرنت بعضی مواقع اونقدر پایین میاد که حتی نمیشه یک فایل 5 مگی رو اپلود کرد.

veniz2008
سه شنبه 05 شهریور 1392, 18:52 عصر
با سلام
اگر در حین کد نوشتن کدها رو بیشتر با متد مینویشتین شاید بهتر بود خصوصا کدهایی مثل لود اطلاعات
مثلا زمانی که شما مخواین تغییرات اعمال شده رو نشون بدین به کسی که جدیدا امده سراغ این مباحث فراخوانی فرم لود (با دوتا نال )تو ذهنش درکش شاید مشکل تر باشه از یه متد ساده که این کار رو انجام میده هم چنین اگر می گفتین بقیه کدهای نوشته شده خودشون رو درصورت تمایل بذارن و پروژه مرحله به مرحله پیش میرفت شاید بهتر باشه و اگر جایی کسی چیزی رو اشتباه درک میکرد اصلاح هم میشد هر چند نکته مبهمی نداره
تشکر از زحماتتون
موفق باشید
حرف شما صحیح هست دوست من.
در ویدئوهای بعدی و در جاهایی که نیاز هست اکثرا به چنین شکلی که شما گفتید اقدام کردم و یک یا چند متد رو برای این کار نوشتم و به جای تکرار کردن کدهای زیاد و تکراری از همین صدا زدن نام متدها استفاده شده است. یعنی دستوراتی رو که چندین بار در یک فرم بایستی اجرا بشن درون یک متد نوشتم و در بخش های مختلف همون متد با یک خط کد صدا زده شده.

esafb52
شنبه 09 شهریور 1392, 22:03 عصر
در مورد بدست آوردن idgroup که در جدول سوالات باید درج بشه من همیشه اسم گروه رو میگرفتم و بعد یه دونه select وبریز تو data table و بعد سطرid رو بدست می آوردم که روش کار شما خیلی عالی بودو استاندارد و کوتاه همچنین من تابع لود اطلاعات با دستور sql command مینوشتم کی خیلی طولانی تر از دستورات شما بود ضمنا ترس استفاده از استور پروسجور ها هم کاملا برطرف شد حین کار هم نکاتی مفیدی گفته شد که تا حالا باش مواجه نشده بودم و همه رو تو این ویدیو ها یاد گرفتم
ممنون

esafb52
دوشنبه 11 شهریور 1392, 13:21 عصر
با سلام و تشکر از زحماتتون
نکته مربوط به DataRowView جالب بود و راستش قبلا این رو ندیدم اگر توضیح بیشتری راجبش می دادین خوب بود چطور ما به یک آیتم دسترسی نداریم ولی میتونیم تون رو CAST کنیم و بریزیم تو یه دیتا رو ویو و ازش استفاده کنیم ؟؟
dataAdapter.SelectCommand.Parameters.AddWithValue("@GROUPID",((DataRowView) comboBox1.SelectedItem)["GROUPID"]);
من برای این قسمت از چکلیست باکس استفاده کردم و به نظرم دردسرش کمتر بود فقط یک سلکت اضافی داشت

موفق باشین

veniz2008
دوشنبه 11 شهریور 1392, 17:51 عصر
با سلام و تشکر از زحماتتون
نکته مربوط به DataRowView جالب بود و راستش قبلا این رو ندیدم اگر توضیح بیشتری راجبش می دادین خوب بود چطور ما به یک آیتم دسترسی نداریم ولی میتونیم تون رو CAST کنیم و بریزیم تو یه دیتا رو ویو و ازش استفاده کنیم ؟؟
dataAdapter.SelectCommand.Parameters.AddWithValue("@GROUPID",((DataRowView) comboBox1.SelectedItem)["GROUPID"]);
من برای این قسمت از چکلیست باکس استفاده کردم و به نظرم دردسرش کمتر بود فقط یک سلکت اضافی داشت
سلام دوست من.
اجازه بدید ابتدا درباره دلیل رخ دادن خطا در رویداد SelectedIndexChanged صحبت کنم.
در حالت عادی که یک کمبوباکس خالی هست، selectedindex اون برابر با 1- هست.
رویداد SelectedIndexChanged زمانی فعال میشه که selectedindex کمبو تغییر (change) کنه.
دلیل اینکه به خاصیت selectedvalue یک آیتم دسترسی نداریم این هست که همزمان که کمبو در حال پر شدن هست (یعنی selectedindex کمبوباکس تغییر میکنه) رویداد SelectedIndexChanged صدا زده میشه که ناتوان از دریافت Value آیتمی هست که هنوز بصورت کامل بارگذاری نشده. (comboboxname.selectedvalue ).
اما در مورد قطعه کدی که من استفاده کردم :
ابتدا لازم هست که مختصری درباره DataView بدونیم. بصورت ساده اگر دیتاتیبل رو یک جدول از داده های واقعی (RealData) در نظر بگیریم یک دیتاویو یک Shot (عکس یا نما) از روی جدول واقعی ما خواهد بود. به بیان دیگه یه دیتاویو یه جدول مجازی از روی جدول واقعی (دیتاتیبل یا دیتاست) ماست که قابلیت سفارشی کردن مسقیم اطلاعات رو داره (مثل فیلتر کردن اطلاعات. در صورتیکه دیتاتیبل مستقیما چنین امکانی رو نداره).
یه کم هم بهتره درباره DataRow بدونیم. در حقیقت DataRow برای دسترسی به سطرهای درون یک دیتاتیبل (یا دیتاست) بکار میره. چه زمانیکه بخوایم سطری رو به دیتاتیبل اضافه کنیم چه زمانیکه قصد حذف سطری رو داریم و چه زمانیکه قصد خوندن یک ستون از یک سطر رو داشته باشیم، از DataRow کمک میگیریم.
اما حالا باید ببینیم که DataRowView چی هست. بصورت ساده DataRowView یک سطر از یک دیتاویو هست یا به عبارت دیگه DataRow ای هست که به دیتاتیبل اشاره داره. بنابراین زمانیکه من به این سطر اشاره میکنم همونجا هم اعلام میکنم که به مقدار کدوم ستون از این سطر نیاز دارم :

((DataRowView)CmbGroup.SelectedItem)["GroupID"]
اما در مورد روشی که شما استفاده میکنید.
قطعا خودتون هم قبول دارید که این کار پاک کردن صورت مساله و مواجه نشدن با خطا هست.
من نظرم اینه که گذاشتن چک لیست باکس و سلکت زدن خیلی سخت تر (و البته غیر بهینه بودن) هست تا یک نصفه خط کد.
بهرحال بسیار خوشحالم که شما ابهامی که براتون بوجود اومده بود رو مطرح کردید و بی تفاوت از کنار موضوع رد نشدید.

amir200h
دوشنبه 11 شهریور 1392, 20:55 عصر
سلام
با تشکر از زحمتتون بابت آموزشها:تشویق:
اگه امکانش هست سورس مریوط به هر قسمت را هم قرار دهید

اتفاقا خوب کاری میکنن سورس رو در اختیار دوستان نمیزارن. اگه سورس رو داشته باشین دیگه خودتون سراغ نوشتن کد نمیرین
بهتره خودتون شروع کنین به ساخت همین پروژه و نمرین کنین هرجاش به مشکل برخوردین به فیلم رجوع کنین

esafb52
سه شنبه 12 شهریور 1392, 00:55 صبح
من نظرم اینه که گذاشتن چک لیست باکس و سلکت زدن خیلی سخت تر (و البته غیر بهینه بودن) هست تا یک نصفه خط کد.
با سلام مجدد نه من هم این رو به روش شما انجام دادم فقط در فرم سوالات بجای گرید از چکلیست باکس استفاده کردم که تفاوت چندانی نداشت ولی در یک جا از دیتا ریدر استفاده کردم

کدهای این فرم
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace MYAZMOON
{
public partial class frmdefineqestions : Form
{
private readonly SqlConnection connection;
private SqlDataAdapter dataAdapter;
private DataTable dt;

public frmdefineqestions()
{
connection =
new SqlConnection(
@"Data Source=.\SQLEXPRESS;AttachDbFilename=
|DataDirectory|\DBAZMOON.mdf;Integrated Security=True;User Instance=True");
InitializeComponent();
}

private void frmdefineqestions_Load(object sender, EventArgs e)
{
comboBox1loadddata();
comboBox2.SelectedIndex = 0;
loadqustintxt();
}

private void loadqustintxt()
{
dt = new DataTable();
dataAdapter = new SqlDataAdapter("qustiontex", connection);
dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
dataAdapter.SelectCommand.Parameters.AddWithValue("@GROUPID",((DataRowView) comboBox1.SelectedItem)["GROUPID"]);
dataAdapter.Fill(dt);
checkedListBox1.DataSource = dt;
checkedListBox1.DisplayMember = "QUSETIONTEXT";
checkedListBox1.ValueMember = "QUSTIONID";
}

private void comboBox1loadddata()
{
dt = new DataTable();
dataAdapter = new SqlDataAdapter("loaddall", connection);
dataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
dataAdapter.Fill(dt);
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "GROUPNAME";
comboBox1.ValueMember = "GROUPID";
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
loadqustintxt();
}

private void addqustion_Click(object sender, EventArgs e)
{
var command = new SqlCommand("addqusetion", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@QUSETIONTEXT", textBox1.Text);
command.Parameters.AddWithValue("@CASE1", textBox2.Text);
command.Parameters.AddWithValue("@CASE2", textBox3.Text);
command.Parameters.AddWithValue("@CASE3", textBox4.Text);
command.Parameters.AddWithValue("@CASE4", textBox5.Text);
command.Parameters.AddWithValue("@ANSWER", comboBox2.Text);
command.Parameters.AddWithValue("@GROUPID", comboBox1.SelectedValue);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
frmdefineqestions_Load(null, null);
MessageBox.Show("سوال درج شد");
cleratxtbox();
}

private void cleratxtbox()
{
foreach (Control c in groupBox1.Controls)
{
if (c is TextBox)
{
(c as TextBox).Text = string.Empty;
}
}
}

private void btndelete_Click(object sender, EventArgs e)
{
if (checkedListBox1.Items.Count > 0 && checkedListBox1.GetItemChecked(checkedListBox1.Sel ectedIndex))
{
var command = new SqlCommand("DELETequstion", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@id", checkedListBox1.SelectedValue);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
frmdefineqestions_Load(null, null);
MessageBox.Show("حذف شد");
}
}

private void checkedListBox1_DoubleClick(object sender, EventArgs e)
{
if (checkedListBox1.Items.Count > 0 && checkedListBox1.GetItemChecked(checkedListBox1.Sel ectedIndex))
{
SqlDataReader reader;
var command = new SqlCommand("sendqestionforupdate", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@id", checkedListBox1.SelectedValue);
connection.Open();
reader = command.ExecuteReader();
try
{
if (reader.Read())
{
textBox1.Text = reader["QUSETIONTEXT"].ToString();
textBox2.Text = reader["CASE1"].ToString();
textBox3.Text = reader["CASE2"].ToString();
textBox4.Text = reader["CASE3"].ToString();
textBox5.Text = reader["CASE4"].ToString();
}
connection.Close();
reader.Close();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
}

private void btnedit_Click(object sender, EventArgs e)
{
if (checkedListBox1.Items.Count > 0 && checkedListBox1.GetItemChecked(checkedListBox1.Sel ectedIndex))
{
SqlDataReader reader;
var command = new SqlCommand("sendqestionforupdate", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@id", checkedListBox1.SelectedValue);
connection.Open();
reader = command.ExecuteReader();
try
{
if (reader.Read())
{
textBox1.Text = reader["QUSETIONTEXT"].ToString();
textBox2.Text = reader["CASE1"].ToString();
textBox3.Text = reader["CASE2"].ToString();
textBox4.Text = reader["CASE3"].ToString();
textBox5.Text = reader["CASE4"].ToString();
comboBox2.Text = reader["ANSWER"].ToString();
}
connection.Close();
reader.Close();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
}
}

private void btnsaveedit_Click(object sender, EventArgs e)
{
var command = new SqlCommand("updatetblqusetion", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@qustinoid", checkedListBox1.SelectedValue);
command.Parameters.AddWithValue("@QUSETIONTEXT", textBox1.Text);
command.Parameters.AddWithValue("@CASE1", textBox2.Text);
command.Parameters.AddWithValue("@CASE2", textBox3.Text);
command.Parameters.AddWithValue("@CASE3", textBox4.Text);
command.Parameters.AddWithValue("@CASE4", textBox5.Text);
command.Parameters.AddWithValue("@ANSWER", comboBox2.Text);
command.Parameters.AddWithValue("@GROUPID", comboBox1.SelectedValue);
connection.Open();
command.ExecuteNonQuery();
connection.Close();
frmdefineqestions_Load(null, null);
MessageBox.Show("سوال ویرایش شد");
cleratxtbox();
}
}
}

veniz2008
سه شنبه 12 شهریور 1392, 01:57 صبح
با سلام مجدد نه من هم این رو به روش شما انجام دادم فقط در فرم سوالات بجای گرید از چکلیست باکس استفاده کردم که تفاوت چندانی نداشت ولی در یک جا از دیتا ریدر استفاده کردم

سلام.
بعضی از کارهایی رو که انجام دادید خوب هست (مثل همون foreach ای که باهاش تکست باکس ها رو خالی میکنید).
ولی بعضی از کارهای دیگه اصلا بهینه نیست و چندین مرتبه یک عمل رو انجام دادید که عملا اضافه کاری هست و باعث کاهش سرعت میشه.
مثلا در addquestion اومدید و فرم لود رو صدا زدید. ما وقتی سوال رو ویرایش میکنیم فقط به سوال دست زدیم نه به گروه های امتحانی. بنابراین صدا زدن فرم لودی که پر کردن کمبو گروه ها رو انجام میده عملا یک کار اضافی و بیهوده هست (با صدا زدن فرم لود عملا دارید به دیتابیس کانکشن میزنید و دوباره اطلاعات گروه ها رو از دیتابیس میخونید و می ریزید داخل کمبو. در صورتیکه این کار هیچ ضرورتی نداره و فقط یکبار بایستی انجام بشه). (این کار رو در btnsaveedit و btndelete هم انجام دادید).
مورد بعدی استفاده بی جهت از دیتا ریدر هست.
گرچه پیاده سازی یک پروژه به روش های متفاوتی انجام میشه و سلیقه برنامه نویس ها در استفاده از اشیای مختلف متفاوت هست ولی به این مورد توجه کنید در اینجا باز هم شکا دارید یک select اضافی رو پیاده سازی میکنید. یک select برای پر کردن چک لیست باکس (معادل همون پر کردن گرید)، و مورد بعدی باز هم اومدید آی دی رو از چک لیست باکس گرفتید و یک select به دیتابیس زدید و اونو با دیتاریدر به تکست باکس ها منتقل کردید که این کار عملا اضافه هست.
یه توصیه ای بهتون میکنم و اونم اینه تحت هیچ شرایطی عمل اضافی انجام ندید. وصل شدن به دیتابیس و خوندن یکسری اطلاعات و برگشت دادن اون، از منابع سیستم استفاده میشه. اگر قرار باشه در هر فرمی حداقل یک عمل نامناسب (عمل اضافی و غیر ضروری) صورت بگیره در کل پروژه تاثیر خودش رو میذاره.
بنابراین سعی کنید هیچ قطعه کدی رو اضافی ننویسید.
همونطور که دیدید من در انتهای ویدئوی چهارم هم عرض کردم که حتی اون FillGrid درون فرم لود هم اضافی هست و بهتره که نوشته نشه (با وجود اینکه فقط یکبار در طول کار کردن با اون فرم اجرا میشد و پردازش سنگینی رو هم در پی نداشت).
سعی کنید به گونه ای برنامه بنویسید که حداکثر صرفه جویی در منابع سیستم صورت بگیره.

esafb52
سه شنبه 12 شهریور 1392, 02:40 صبح
با سلام و تشکر از پاسخ تون بله دست و پا شکسته یاد گرفتن این چیزا ها رو داره دیگه!!البته من کلا به روش دیگه ای کار میکنم سعی میکنم مثلا یه تابع به این شکل مینویسم

public void iud(OleDbCommand cmd)
{
cmd.Connection = con;
con.Open();
da.SelectCommand = cmd;
ds.Clear();
cmd.ExecuteNonQuery();
con.Close();
da.Update(ds, "tbbook");
cmd.Dispose();
}

و بعد دستورات رو بهش پاس میدم البته از این موارد تو اون روش هم هست که ان شالله با آموزش های شما و بقیه دوستان و همت خودم اونها رو هم برطرف میکنم
مجددا از پاسخ گویی و آموزش های خوبتون تشکر میکنم
موفق باشین

shahin60
پنج شنبه 14 شهریور 1392, 18:41 عصر
سلام ممنون از آموزشاتون
یه سوال:
من از stored proc استفاده نمی کنم حالا چطور باید به پارامتری خارجی که تعریف کردم دسترسی داشته باشم؟ ومقدارشو چک کنم
کاش همه روش ها رو توضیح می دادید .ممنون می شم کد بزارید
یا علی

veniz2008
پنج شنبه 14 شهریور 1392, 19:18 عصر
سلام ممنون از آموزشاتون
یه سوال:
من از stored proc استفاده نمی کنم حالا چطور باید به پارامتری خارجی که تعریف کردم دسترسی داشته باشم؟ ومقدارشو چک کنم
کاش همه روش ها رو توضیح می دادید .ممنون می شم کد بزارید
یا علی
سلام.
من متوجه منظور شما نشدم. کاش کاملتر توضیح میدادید.
وقتی از sp استفاده نمی کنید، چطور پارامتر خروجی دارید؟ (منظورتون رو کامل توضیح بدید).
کدی رو که نوشتید اینجا قرار بدید تا دربارش بحث کنیم.
امکانش وجود نداشت که من بخوام همه روش ها رو در یک آموزش قرار بدم. ADO (بصورت کدنویسی مستقیم، با sp، چند لایه نویسی)، linq و EF .
حداقل بالای 150 ساعت آموزش میخواد. ضمن اینکه تعدد روش ها در یک مجموعه آموزشی باعث سردرگمی مخاطب میشه.
سعی شده هم افراد مبتدی در نظر گرفته بشه و هم روشی گفته بشه که در آینده بتونن با همین روش کارهای بزرگتری رو انجام بدن.
به شخصه بهتون پیشنهاد نمیکنم که از کدنویسی مستقیم درون ویژوال استفاده کنید.
اگر از ADO.Net استفاده میکنید حتما برید سمت استفاده از Stored Procedure ها.
من قبلا در این باره در یکی از تاپیک ها صحبت کرده بودم ولی اینجا هم قرار میدم تا دوستانی که اون تاپیک رو ندیدن این مورد رو مد نظر داشته باشند :
بحث Stored Procedure ها یکی از بحث های حرفه ای در بخش کار با دیتابیس هست که 3 ویژگی برتر اون در مقایسه با کدنویسی مستقیم به قرار زیر هست :
1. Performance بالاتر : در کدنویسی مستقیم،در هر بار و زمانیکه شما یک دستور sql (همون Tsql ) رو از سمت برنامه (مثلا #C) به سمت دیتابیس می فرستید (یک درخواست مثل لیست همه کالاها). برای به سرانجام رسیدن این درخواست بایستی مراحل زیر انجام بشه :
بعد از انتقال دستور شما (select ، update و ...) از سمت برنامه به سمت سرور (دیتابیس) کارهای زیر هر بار انجام میشه :
a) در سمت سرور ابتدا از لحاظ syntax چک میشه که آیا این دستور قابلیت اولیه برای اجرا شدن رو داره یا نه.
b) در صورت صحت مرحله قبل یک Execute Plan برای دستور شما توسط sql server اختصاص داده میشه.
c) در مرحله بعد دستور مورد نظر کامپایل میشه.
d) در نهایت دستور در سمت سرور، Run (اجرا) میشه.
e) بعد از اجرا، نتیجه کوئری به سمت برنامه کاربردی برگشت داده میشه و ما میتونیم نتیجه کار رو مشاهده کنیم.
اما در Stored Procedure ها مراحل a و b و c یکبار در سمت سرور انجام میشه و این مراحل دیگه برای اون sp تکرار نمیشه. به همین خاطر هست که سرعت Stored procedure ها بیشتر از کدنویسی مستقیم هست (هر چقدر برنامه و کوئری ها پیچیده تر باشه این سرعت بیشتر نمایان میشه).
در کدنویسی مستقیم :

110211

در Stored Procedure ها :

110210

2. برنامه نویسی modular (ماژولار) : یک SP یکبار نوشته میشه ولی میتونید اون رو بارها در قسمت های مختلف برنامه (با توجه به نیازتون) صدا بزنید بدون اینکه نیازی به نوشتن چندین باره کدها باشه. خوانایی بالاتری رو هم شاهد خواهیم بود.
3. امنیت بالاتر : شما میتونید کدهای درون یک sp رو رمزنگاری کنید تا کدهای داخل اون قابل مشاهده توسط کاربران نباشه. در این حالت یک کاربر فقط میتونه از اون sp استفاده کنه بدون اینکه دغدغه اینو داشته باشید که به کدهای Tsql شما دسترسی داشته باشه.
همچنین میشه واسه sp ها سطح دسترسی (مجوز) تعریف کرد که فقط افرادی که ما مشخص می کنیم بتونن به اون sp و کدهای درون اون دسترسی داشته باشند.

shahin60
پنج شنبه 14 شهریور 1392, 21:30 عصر
ممنون از توضیح کامل تون
با استفاده از sp و dataset چطوری به این پارامتر دسترسی پیدا کنم
این خطا میگیره:

int result = 0;

DataSet1TableAdapters.UserTableAdapter da = new DataSet1TableAdapters.UserTableAdapter();
DataSet1.UserDataTable dt = new DataSet1.UserDataTable();
da.Insert(txtName.Text, txtUser.Text, txtPass.Text, 1,result);


متن خطا:
can not convert ref int to int

esafb52
پنج شنبه 14 شهریور 1392, 22:25 عصر
با سلام وتشکر از زحماتت جناب ونیز2008
قسمت Stored Procedure رو من تو اون تایپیک هم خوندم و خیلی هم خوب توضیح دادین ولی یک نکته برام کمی ابهام داشت اونم

اما در Stored Procedure ها مراحل a و b و c یکبار در سمت سرور انجام میشه و این مراحل دیگه برای اون sp تکرار نمیشه.
یعنی در حین اجرای برنامه و تا بستنش!!
یا نه یکبار بروی یک سرور sql و دیگه n بار اجرا؟؟

veniz2008
پنج شنبه 14 شهریور 1392, 22:37 عصر
ممنون از توضیح کامل تون
با استفاده از sp و dataset چطوری به این پارامتر دسترسی پیدا کنم
این خطا میگیره:

int result = 0;

DataSet1TableAdapters.UserTableAdapter da = new DataSet1TableAdapters.UserTableAdapter();
DataSet1.UserDataTable dt = new DataSet1.UserDataTable();
da.Insert(txtName.Text, txtUser.Text, txtPass.Text, 1,result);


متن خطا:
can not convert ref int to int
روشی رو که شما استفاده می کنید متفاوت هست با اون چیزی که من در این آموزش ها توضیح میدم و سوال شما در چارچوب تاپیک ما نیست.
شما از TableAdapter ها استفاده می کنید و قصد ارتباط دادن اون با sp ها رو دارید ولی در این آموزش ها ما از این روش استفاده نمی کنیم.
لطفا سوالتون رو در یک تاپیک مجزا بپرسید تا دوستان شما رو راهنمایی کنن.
موفق باشید.

veniz2008
جمعه 15 شهریور 1392, 01:27 صبح
با سلام وتشکر از زحماتت جناب ونیز2008
قسمت Stored Procedure رو من تو اون تایپیک هم خوندم و خیلی هم خوب توضیح دادین ولی یک نکته برام کمی ابهام داشت اونم

یعنی در حین اجرای برنامه و تا بستنش!!
یا نه یکبار بروی یک سرور sql و دیگه n بار اجرا؟؟
زمانیکه برای بار اول درون برنامه یک sp صدا زده میشه، sql server بعد از syntax check یک plan برای اون sp در Ram (حافظه) ایجاد میکنه و دستور compile میشه. حالا تا زمانیکه این plan در ram باقی باشه دیگه این مراحل چک نمیشه. یعنی اگر 100 بار هم اون sp صدا زده بشه به اون plan موجود در حافظه رجوع میشه و دیگه مراحلی رو که ذکر کردم تکرار نمیشه.
اساسا" یکی از مواردی که استفاده از sp ها رو توجیه میکنه همین تکرار (فراخوانی)یک دستور sql هست.
مثلا در پروژه ما، زمانیکه فرم سوالات باز میشه، کاربر به احتمال زیاد چندین بار پشت سر هم قصد داره که سوالاتی رو ذخیره کنه.
اولین سوال رو که میخواد ثبت کنه (یعنی sp مورد نظر که AddQuestion هست) فراخوانی میشه. چون بار اول هست، برای اون sp یک plan در رم ایجاد میشه و سوال ثبت میشه. حالا زمانیکه میخواد سوال دوم رو ثبت کنه دیگه اون مراحل چک نمیشن چون یک طرح و نقشه (plan) براش وجود داره.
اما اگر کدنویسی مستقیم باشه برای سوال دوم ، دستور sql مورد نظر دوباره اون مراحل براش چک میشه.

aydingol
دوشنبه 18 شهریور 1392, 14:27 عصر
ممنون از بابت آموزشها
سوالی که داشتم در رابطه با این بود که من در طراحی فرم ادمین برای تکست باکس پسورد ، گزینه PasswordChar را * کردم و می خوام زمانی که برای ویرایش و حذف روی آن کلیک میشه به صورت عدد یا حروفی در تکست باکسها نشون داده بشه
از چه روشی باید استفاده کنم ؟؟؟؟

veniz2008
دوشنبه 18 شهریور 1392, 22:15 عصر
ممنون از بابت آموزشها
سوالی که داشتم در رابطه با این بود که من در طراحی فرم ادمین برای تکست باکس پسورد ، گزینه PasswordChar را * کردم و می خوام زمانی که برای ویرایش و حذف روی آن کلیک میشه به صورت عدد یا حروفی در تکست باکسها نشون داده بشه
از چه روشی باید استفاده کنم ؟؟؟؟
خیلی راحت میتونید از کدنویسی برای کنترل متن تکست باکس استفاده کنید. مثال زیر رو ببینید :

if (checkBox1.Checked)
{
textBox1.PasswordChar = '*';
textBox1.Text = "salam";
}
else
{
textBox1.PasswordChar = '\0';
textBox1.Text = "salam";
}



private void button1_Click(object sender, EventArgs e)
{
//declare variable
double dblArea;

//calculate the area of circle with radius 100
dblArea = CalculateAreaFromRadius(100);

//print the results
MessageBox.Show(dblArea, "Area");
}

سلام.
سوال شما به بحث ما ارتباطی نداره فقط اینو بگم که کلاس مسیج باکس و متد show اون به 21 روش قابل مقداردهی هست که شما خارج از فرمت (قالب) این 21 روش مسیج باکس رو مقدار دهی کردید. (حالتی وجود نداره که مورد اول double باشه و مورد دوم string قبول کنه).
دوستان لطفا سوالاتی رو که به آموزش ما مرتبط نمیشه در تاپیک های جداگانه مطرح بفرمایید.
تشکر از همکاری دوستان.

esafb52
چهارشنبه 20 شهریور 1392, 15:13 عصر
با سلام
اگر ویرایش رو هم به این صورت که یک باکلیک بر روی یک سطر و زدن دکمه ویرایش یک فرم جدید رو نمایش میدادین و بعد با DialogResult نتایج رو برمیگردوندین پیاده سازی میشدقشنگتر بود
همچنین برای سطح دسترسی اگر در جداول فیلدهایی از نوع bit میگرفتین و برای تعریف سطح دسترسی ازش استفاده میکردین جالبتر و کارامدتر نبود؟؟مثلا اگر ادمین بخواهد به کسی یه اجازه دسترسی بیشتری بده الان بااین روش در زمان اجرا نمیتونه کاری بکنه هرچند که اینجا در این برنامه فقط 2 سطح وجود داره
موفق باشید

veniz2008
چهارشنبه 20 شهریور 1392, 17:17 عصر
با سلام
اگر ویرایش رو هم به این صورت که یک باکلیک بر روی یک سطر و زدن دکمه ویرایش یک فرم جدید رو نمایش میدادین و بعد با DialogResult نتایج رو برمیگردوندین پیاده سازی میشدقشنگتر بود
سلام دوست من.
بعضی جاها واقعا سلیقه ای هست و یک برنامه نویس به گونه ای طراحی میکنه که برنامه نویس دیگه اون روش رو نمی پسنده. من چنین تفاوت هایی رو دوست دارم چراکه انسان ها متفاوت به قضایا نگاه میکنند.
من نظر شخصی خودم (ممکنه اشتباه هم باشه) اینه که تا حد امکان (نه همیشه) بایستی از پاس کردن کاربر از یک فرم به یک فرم جدید اجتناب کرد مگر در حالاتی که واقعا ضروری باشه. من چند نرم افزار نسبتا بزرگ رو که دیدم به همین روش که همه کارها رو در یک فرم انجام میدادن پیاده سازی میکردن. ولی باز هم میگم ممکنه شما نرم افزاری رو ببینید که به روش دیگه ای عملیات ها رو طراحی کرده باشه.

همچنین برای سطح دسترسی اگر در جداول فیلدهایی از نوع bit میگرفتین و برای تعریف سطح دسترسی ازش استفاده میکردین جالبتر و کارامدتر نبود؟؟مثلا اگر ادمین بخواهد به کسی یه اجازه دسترسی بیشتری بده الان بااین روش در زمان اجرا نمیتونه کاری بکنه هرچند که اینجا در این برنامه فقط 2 سطح وجود داره
موفق باشیددر این مورد در طول ویدئو کاملا توضیح دادم که با توجه به اینکه پروزه ما دو نوع سطح دسترسی ساده داره و اینکه ما منوهای زیادی رو نداریم از ساخت جدول برای این کار اجتناب شد. در پروژه هایی که چندین سطح دسترسی وجود داره و تعداد افرادی که با اون نرم افزار کار میکنن زیاد هستن حتما بایستی یه جدول جداگانه برای ذخیره سازی سطح دسترسی اشخاص (یا گروه ها) در نظر گرفت.
من قبلا در یک تاپیک اینو بصورت کامل توضیح دادم ولی بخاطر اینکه ممکنه افرادی باشند که اون تاپیک رو ندیدن، اون مطالب رو اینجا هم میارم تا افرادی که این تاپیک رو ملاحظه میکنن و از این بابت مشکل دارند بتونن این مورد رو هم یاد بگیرند.
------------------------------------------------------------------------------------------------------
روند کار شما دو مرحله هست. 1: مشخص کردن سطح دسترسی برای هر کاربر 2: اعمال کردن این محدودیتها در هنگام لاگین هر شخص.
یکی از روش های پیاده سازی میتونه اینطوری باشه:
روش اول : یک جدول که سطح دسترسی اشخاص رو مشخص میکنه نیاز دارید.ستون های این جدول نام کاربری و تعداد منوها (یا در صورت نیاز زیر منوها) هست. یعنی اگر در برنامه شما 5 منو وجود داره که هر منو هم 3 زیرمنو داره اگر میخواید برحسب منو کاربر رو کنترل (اجازه یا عدم اجازه) کنید باید علاوه بر نام کاربری 5 تا ستون دیگه هم ایجاد کنید و اگر میخواید بر حسب زیر منو کاربر رو کنترل کنید بایستی 5*3 = 15 فیلد ایجاد کنید.
فیلدها رو از نوع bit در نظر بگیرید (اگر تیک نداشته باشه یعنی false و اجازه دسترسی به اون منو رو نداره).
روش دیگه میتونه بر حسب سمت شغلی باشه.
در اینجا دو جدول نیاز هست : جدول اول شبیه جدول بالاست فقط به جای نام کاربری باید سمت شغلی مشخص بشه . و جدول دوم میشه نام کاربری و سمت شغلی. خوبی این روش اینه که یکبار برای هر سمت شغلی، محدودیت ها تعریف میشه و بعد از اون فقط برای یک شخص سمت شغلیش رو مشخص میکنیم. (زمانیکه تعداد کاربران و تعداد منوها(یا زیرمنوها) زیاد باشن، این روش به مراتب به صرفه تر هستش چون فضای به مراتب کمتری گرفته میشه).
حالا هنگام لاگین ، اگر کاربر یوزر و پسورد رو درست وارد کرد، میرید از جدول سطح دسترسی، رکوردش رو میخونید و بصورت زیر بر روی منوها (یا زیرمنوها) اعمال می کنید(کد زیر برای زیر منو ها هست، در ادامه برای منوها هم کد رو میزارم):

M00.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M00"].ToString());
M01.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M01"].ToString());
M10.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M10"].ToString());
M11.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M11"].ToString());
M12.Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M12"].ToString());


برای غیر فعال کردن منوها هم میتونید از کد زیر استفاده کنید(اگر در جدول برای تعیین سطح دسترسی به جای زیر منو از منو استفاده کردید. مثل همون چیزی که ما در پروژه انجام دادیم و منوها رو غیرفعال میکردیم):

menuStrip1.Items["M0"].Enabled = Convert.ToBoolean(DtAccessLevel.Rows[0]["M0"].ToString());
توجه : من برای راحتی کار خودم نام فیلدها و نام منوها در فرم رو یکسان در نظر گرفتم. منظور از M00 یعنی اولین زیرمنو در اولین منو. منو اول من M0 هست و منوی بعدی M1 و ...
توضیحات بیشتر :
وقتی یک شخص یوزر و پسورد رو صحیح وارد میکنه، باید برید داخل جدولی که سطح دسترسی رو نگهداری میکنید. اونجا یک select میزنید:

select * from TblAccessLevel where UserID = @userid
منظور از userid@ همون نام کاربری صحیح هست که کاربر باهاش لاگین کرده. نتیجه select بالا میشه یک رکورد که میگه وضعیت هر منو برای اون شخص چطوره (True یا False ).
اگر هم از روش دوم استفاده کردی یعنی دو جدول داری که یکی شامل (کد) سمت شغلی و فیلدهایی به تعداد منوها(یا زیرمنوها) و جدول دوم هم میشه نام کاربری و (کد) سمت شغلی. در این حالت select شما بصورت زیر میشه:

select * from tbl1 inner join tbl2 on tbl1.JobID = tbl2.JobID where UserID = @userid
موفق باشید.

esafb52
چهارشنبه 20 شهریور 1392, 18:46 عصر
با سلام و تشکر از پاسخ کامل تون بله قبول دارم که کاربر رو نباید به فرم های مختلف پاس داد ولی این انتخاب ستون رو هدر برای ویرایش خیلی جالب نیست اصلا شما فکر کنید یه کاربری برای بار اول این گرید رو ببینه نمیدونه کجا رو کلیک کنه من اکثرا یه ستون چک باکس میذارم و با اون کار میکنم یا نوع دو ستون از نوع باتن به گرید اضافه میکنم که تو هر سطرهستند یکی حذف یکی ویرایش

veniz2008
چهارشنبه 20 شهریور 1392, 18:59 عصر
با سلام و تشکر از پاسخ کامل تون بله قبول دارم که کاربر رو نباید به فرم های مختلف پاس داد ولی این انتخاب ستون رو هدر برای ویرایش خیلی جالب نیست اصلا شما فکر کنید یه کاربری برای بار اول این گرید رو ببینه نمیدونه کجا رو کلیک کنه من اکثرا یه ستون چک باکس میذارم و با اون کار میکنم یا نوع دو ستون از نوع باتن به گرید اضافه میکنم که تو هر سطرهستند یکی حذف یکی ویرایش
برای حل این مشکل دو راه در تمام نرم افزارها پیاده سازی میشه :
1. یک متن کوتاه در همون فرم قرار میدن که توضیح مختصری (چکیده ای) از نحوه کار رو نشون میده. مثلا :
"برای تصحیح یا حذف یک رکورد بر روی ابتدای آن سطر دابل کلیک کنید". اینطوری کاربر متوجه میشه که باید چطوری این کار رو انجام بده.
ما در پروژه چنین پیغامی رو نذاشتیم (چون من در حین ویدئو این مطلب رو توضیح دادم) ولی حتما باید در یک پروژه واقعی چنین پیغام های کوتاهی ذکر بشه تا کاربر سر درگم نشه.
2. فایل راهنمای نرم افزار.
در فایل راهنمایی که همراه نرم افزارها وجود داره بصورت کامل باید نحوه استفاده از قسمت های مختلف یک نرم افزار توضیح داده بشه (معمولا از تصاویر به همراه متن استفاده میشه) که در قسمت آخر این مجموعه آموزشی با استفاده از نرم افزار WinCHM ساخت چنین راهنماهایی هم بصورت کامل توضیح داده میشه.

redflight
جمعه 22 شهریور 1392, 14:55 عصر
سلام
من نمی دونم مشکلم چی بود که با firefox فیلم ها دانلود نمی شد اما الان که با گوگل کروم دانلود کردم خیلی خیلی خوشحالم
فیلم اول رو دیدم و فکر می کنم 4 تاشو امروز ببنم تا عقب نیفتم
اما یه سوالی دارم
راجع به پایگاه داده
همون طور که گفتین توی فیلم اول پایگاه داده ای که توی خود ویژوال هست رو برای پروژه های کوچیک و دانشجویی مناسبه
برای پروژه های بزرگ ( خیلی خیلی خیلی بزرگ ) ما باید از خود اس کیو ال 2008 استفاده کنیم خب از چه نوعیش؟ بهترین نوعش اکسپرسه؟

ببخشید یه سوال دیگه هم دارم فیلم ها رو چند روز یک بار می زارید ؟
می شه این کارتون رو ادامه بدید؟ آخه واقعا فیلماتون خوبه من با این که یکیشو دیدم اما بی نهایت راضی ام من هزینه فوق العاده زیادی برای سی دی های اموزشی سی شارپ داده بودم و... ولی اینجوری نبودن
می شه بعد از این دوره هم دوره های دیگه رو ادامه بدید؟
ممنون

veniz2008
جمعه 22 شهریور 1392, 18:59 عصر
همون طور که گفتین توی فیلم اول پایگاه داده ای که توی خود ویژوال هست رو برای پروژه های کوچیک و دانشجویی مناسبه
برای پروژه های بزرگ ( خیلی خیلی خیلی بزرگ ) ما باید از خود اس کیو ال 2008 استفاده کنیم خب از چه نوعیش؟ بهترین نوعش اکسپرسه؟
سلام دوست عزیز.
ببینید ما چندین نوع Sql server داریم که در واقع Engin های sql هستند که هر کدوم از اینها برای موارد خاص خودشون استفاده میشن.
SQL Server Express Edition
SQL Server Standard Ediotion
SQL Server Developer Edition
SQL Server EnterPrise Edition
نسخه express رابط گرافیکی (management studio) رو نداره و از لحاظ یکسری امکانات هم محدودیت هایی داره، بسیار کم حجم تر از بقیه نسخه ها هست و البته رایگان هست (مطمئنا چون در ایران زندگی میکنیم کلمه "رایگان" کاملا بی مفهوم هست برای ما).
یک مدل از sql express هست که رابط گرافیکی هم داره که اصطلاحا" بهش SQL Server Express with Advanced Services گفته میشه. این هم رایگان هست ولی رابط گرافیکی رو هم داره.
درباره محدودیت های sql express اینو از msdn براتون درآوردم :
Limitations of SQL Server Express Edition
1. Number of CPUs supported
SQL Server Express uses only one CPU at a time. It can be installed on a server with multiple CPUs, but it will use only one CPU at a time.
2. Maximum memory used
SQL Server Express uses a maximum of 1 GB memory for it's data buffer. So, if your server has severaql GB memeory, SQL Server Express cannot take advantage of it.
3. Database size limit
Maximum database size is limited to 4 GB (log file size is not counted)
4. Profiler in SQL Server Express
Profiler tool is not included with SQL Server Express editions.
5. Job Scheduler
Job Scheduling service is not available with SQL Server Express.
6. Import/Export
Data import and export feature is not available with SQL Server Express.( But can be downloaded as Russell has mentioned)

از این توضیحات که بگذریم درباره سوالتون برای برنامه نویسان بهترین نسخه، همون SQL Server Developer Edition هست که البته شما می تونید نسخه Standard رو هم نصب کنید.


ببخشید یه سوال دیگه هم دارم فیلم ها رو چند روز یک بار می زارید ؟ اگر مشکل خاصی پیش نیاد فیلم ها معمولا هر 3 روز یکبار قرار میگیرن.

می شه این کارتون رو ادامه بدید؟ آخه واقعا فیلماتون خوبه من با این که یکیشو دیدم اما بی نهایت راضی ام من هزینه فوق العاده زیادی برای سی دی های اموزشی سی شارپ داده بودم و... ولی اینجوری نبودن
می شه بعد از این دوره هم دوره های دیگه رو ادامه بدید؟
ممنون نظر لطف شماست بابت آموزش ها ولی باور بفرمایید تهیه فیلم آموزشی بسیار وقت گیر و زمانبر هست.
اینطور نیست که یک camtasia نصب کنم و شروع به ضبط کردن کنم. من حساسیت زیادی رو نسبت به مطالبی که میگم دارم. قبلش ساعت ها مطالعه کردم و از جاهای مختلف و منابع مختلف مطالعه کردم تا مطلبی رو که ارائه میکنم مفید باشه (هر چند اعتقاد دارم که هر کاری باز هم عاری از خطا و اشتباه نیست و ممکنه ایراداتی هم وجود داشته باشه).
بحث بعدی زمانی هست که بایستی برای تدوین این آموزش ها گذاشت. هر چند که من هیچگونه کار تزئینی برای این مورد انجام ندادم ولی با این وجود باز هم واقعا زمانبر هست ویرایش کردن آموزش هایی که ضبط شده.
غول بعدی در راه آموزش ها، بحث آپلود کردن ویدئوها هست. اکثر مواقع تا 3 ساعت پای سیستم میمونم تا یک فایل 60 مگی آپلود بشه. همونطور که خودتون هم میدونید آپلود کردن بسیار زمانبرتر از دانلود کردن هست.
تمام این کارها وقت و انرژی زیادی رو می طلبه که باعث میشه آدم از خیلی از کارها بیفته.
به این دلایلی که در بالا عرض کردم امکان تهیه آموزش جدید فعلا مقدور نیست و طرح و اندیشه ای هم برای این کار ندارم.
موفق باشید.

redflight
شنبه 23 شهریور 1392, 07:55 صبح
سلام
خیلی ممنون برای پاسخ جامع
ببخشید من از کجا بفهمم کدوم sql رو نصب کردم؟

مثلا اگر برای همین آزمون ساز 4000 تا سوال داشته باشم نسخه استاندارد جواب می ده ؟ ( مثال زدم :دی ) کلا یه جدول اگه 50000 تا مثلا سطر داشته باشه هیچ اتفاق خطرناکی براش نمی افته؟؟

بدون اغراق می گم فیلم های آموزشی ای که تهیه کردید خیلی جامع است من اگه سی دی های آموزشی ای که خریدم و به اصطلاح بهترین ها بودن ( مقدماتی - متوسط - پیشرفته - سطح حرفه ای یک ، دو ، سه ، چهار ، پینج) البته تا حرفه ای 1 که دیدم پایگاه داده اش اکسس هست هنوز!! رو اگه بشه اینجا بزارم همه دوستان متوجه می شن که من چی میگم
برای همین خیلی مصر ( moser نمی دونم املاش رو درست نوشتم یا نه) هستم آموزش های شما ادامه داشته باشه حتی اگه مجبور بشین برای وقتی که می زارید آموزش های تجاری ( تولید سی دی های آموزشی) رو راه بندازید من و دوستانم با کمال میل سی دی ها رو تهیه می کنیم فقط خواهش می کنم این آموزش ها رو متوقف نکنین من آموزش دیگه ای نمی تونم پیدا کنم :(

veniz2008
شنبه 23 شهریور 1392, 13:40 عصر
ببخشید من از کجا بفهمم کدوم sql رو نصب کردم؟
خیلی راحت هست. یک new query در محیط sql باز کنید و کد زی رو در اون اجرا کنید :

print @@version

110653


مثلا اگر برای همین آزمون ساز 4000 تا سوال داشته باشم نسخه استاندارد جواب می ده ؟ ( مثال زدم :دی ) کلا یه جدول اگه 50000 تا مثلا سطر داشته باشه هیچ اتفاق خطرناکی براش نمی افته؟؟با sql شوخی نکنید بدش میاد!.
الان بحث بر سر میلیون ها رکورد و چند ترابایت اطلاعات هست. SQL بسیار بسیار قدرتمندتر از اون چیزی هست که فکر می کنید.
این چیزی که گفتید برای نسخه express هم مثل آب خوردن هست چه برسه به نسخه های Standard و Developer .
اون توضیحاتی که بهتون درباره محدودیت های express دادم رو دوباره بخونید.


بدون اغراق می گم فیلم های آموزشی ای که تهیه کردید خیلی جامع است من اگه سی دی های آموزشی ای که خریدم و به اصطلاح بهترین ها بودن ( مقدماتی - متوسط - پیشرفته - سطح حرفه ای یک ، دو ، سه ، چهار ، پینج) البته تا حرفه ای 1 که دیدم پایگاه داده اش اکسس هست هنوز!! رو اگه بشه اینجا بزارم همه دوستان متوجه می شن که من چی میگمنظر لطف شماست.
متاسفانه اکثر مجموعه های آموزشی همینطور هستن که شما میگید. بیشتر به فکر پول در آوردن هستن تا آموزش دادن.

برای همین خیلی مصر ( moser نمی دونم املاش رو درست نوشتم یا نه) هستم آموزش های شما ادامه داشته باشه حتی اگه مجبور بشین برای وقتی که می زارید آموزش های تجاری ( تولید سی دی های آموزشی) رو راه بندازید من و دوستانم با کمال میل سی دی ها رو تهیه می کنیم فقط خواهش می کنم این آموزش ها رو متوقف نکنین من آموزش دیگه ای نمی تونم پیدا کنم :(املاش درست بود دوست من (مصر به معنای اصرار کننده هست!)
پول!!!!!!!!!!! :لبخند:
پول، شهوت و قدرت 3 چیزی هستن که همیشه وسوسه کننده بودن.
من هیچگونه نیت مالی و انگیزه اقتصادی از این آموزش ها ندارم و هدفم هم این نیست که با گذاشتن این آموزش ها عده ای رو وسوسه کنم که مثلا برای آموزش های بعدی (در صورت وجود) پول پرداخت کنن.
گرچه اگر شخصی بابت آموزش هاش پول هم دریافت کنه اساسا" هیچ ایرادی نداره. چراکه بابت تلاش و زحمتش مزد دریافت کرده. مهم اینه آدم به اندازه دانشش پول طلب کنه. به قول شما سی دی بی محتوا نده بیرون و کلی پول هم بگیره.
این آموزش ها یک شروع هست دوست من.
هنر شما باید این باشه که روی موضوعات جدید فکر کنید. مطالب جدید رو مطالعه کنید و ایده های جدید داشته باشید. هیچوقت به این چیزهایی که من میگم اکتفا نکنید. بهترین دوست شما کتاب خواهد بود. ویدئو هم مزایای خودش رو داره ولی کتاب یه چیز دیگست.

سلام اقا من کلا در ارتباط بین جداول مشکل دارم
میشه بگین کی باید از کلید خارجی استفاده کنیم کلید خارجی میتونه کلید اصلی هم باشه و... کاش یه فیلم هم درباره این مورد میزاشتین.
اول یه توضیح کتابی میدم بعد با چند مثال توضیح میدم مطلب رو.
وظیفه کلید خارجی، ارتباط دادن دو جدول با هم هست.
مثال 1 : سیستم دانشگاه
جدول دانشجو رو فرض کنید که کلید اصلی اون شماره دانشجویی هست.
حالا مثلا جدول نمرات رو در نظر بگیر. یا جدول دروس اخذ شده یا جدول "وام های دریافتی" و ...
ببینید در تمام این جداول باید مشخص بشه که نمره دانشجو چند هست، یا اینکه دانشجو چه درسی رو اخذ کرده و یا دانشجو چه وامی رو گرفته.
همونطور که می بینید هر 3 تای این جداول به جدول "دانشجو" وابسته هستن. اگر دانشجویی وجود نداشته باشه این جداول بی معنی هستن.
بنابراین شماره دانشجویی که در این 3 جدول میاد وابسته به همون کلید اصلی جدول دانشجو هست. این همون کلید خارجی هست. ما نمیتونیم (حق نداریم) که شماره دانشجویی رو وارد جدول نمرات(یا جدول وام ها) کنیم که وجود خارجی نداره. در غیر اینصورت صحت و امنیت داده ها زیر سوال میره. پس ارتباط بین جداول از طریق کلید خارجی باعث تضمین ورود مقدار صحیح در جداول وابسته (جدول نمره، جدول وام، جدول دروس اخذ شده) میشه.
مثال بعدی رو یه فروشگاه ساده در نظر بگیرید.
یه جدول داریم به نام مشتری ها (customer).
حالا جدول سفارشات (orders) یا جدول خرید (buy) رو در نظر بگیر.
در هر دوی این جداول بایستی مشخص بشه که چه مشتری کالا سفارش داده و کدوم مشتری کالا رو خریداری کرده.
بنابراین شماره مشتری که در این دو جدول میاد وابسته به همون شماره مشتری در جدول مشتری هستن. این فیلد که وظیفه ارتباط بین این دو جدول با جدول مشتری رو داره همون کلید خارجی هست (یادتون نره ما نمیتونیم (و حق نداریم) شماره مشتری رو وارد جدول سفارشات یا جدول خرید کنیم که وجود خارجی نداره).
یا مثلا در همین مثال فروشگاه ما یک جدول کالا داریم که کلید اصلی اون کد کالا خواهد بود.
در جدول سفارشات علاوه بر اینکه باید بدونیم چه مشتری سفارش داده باید بدونیم چه کالایی هم سفارش داده. بنابراین نیاز هست که کد کالای مورد نظر هم ثبت بشه. به همین خاطر باید کد کالایی در جدول سفارشات بیاد که در جدول کالا وجود داشته باشه. پس اینجا ما دو کلید خارجی داریم. یکی کد مشتری و دیگری کد کالا (که وابسته به جدول کالا هست).
در مورد سوالتون که گفتید آیا کلید خارجی میتونه کلید اصلی باشه یا نه.
بله میتونه ولی به شرایط جدول و پروژه بستگی داره.
باید انواع رابطه ها بین جداول رو بدونیم.
1.رابطه یک به یک (مثلا هر کشوری فقط یک پایتخت داره و هر پایتختی هم فقط مال یک کشور هست. یا سیستم ازدواج در همه (یا اکثر) کشورهای دنیا (به جز ایران) : هر مرد فقط میتونه یک زن داشته باشه و هر زنی هم فقط میتونه یک مرد داشته باشه)
2. رابطه یک به چند (مثلا هر دانشجویی فقط میتونه یک استاد راهنما داشته باشه ولی همون استاد میتونه واسه چندین دانشجو استاد راهنما باشه. یا مثال ازدواج تو ایران : هر زنی فقط میتونه یک شوهر داشته باشه ولی همون شوهر میتونه چندین زن داشته باشه)
3. رابطه چند به چند (رابطه اخذ درس اینطوری هست. هر دانشجویی میتونه چندین درس اخذ کنه و هر درسی هم میتونه توسط چندین دانشجو اخذ بشه).
با این توضیحات باید دید که آیا کلید خارجی که در یک جدول میاد چه رابطه ای داره. زمانی میتونید کلید خارجی رو کلید اصلی هم در نظر بگیرید که رابطه یک به یک داشته باشید.
مثلا در سیستم دانشگاه.
در جدول نمرات آیا برای هر دانشجویی فقط یک نمره ثبت میشه؟
جواب نه هست. در جدول نمرات هر دانشجو براش چندین نمره ثبت میشه. پس کلید خارجی نمیتونه کلید اصلی باشه (شماره دانشجویی یک شخص چندین بار تکرار میشه که نقض کننده مفهوم کلید اصلی هست).
یا در جدول وام ها : آیا برای هر دانشجویی فقط یک وام ثبت میشه؟
جواب نه هست. یک دانشجو میتونه چندین وام بگیره. بنابراین چون شماره دانشجویی یک شخص در جدول وام (کلید خارجی) چندین بار میتونه تکرار بشه بنابراین اینجا باز هم کلید خارجی نمیتونه کلید اصلی باشه.
فرض بگیرید (روی صحت جداول خیلی تمرکز نکنید) دو جدول تولد و مرگ داریم.
قطعا جدول مرگ وابسته به تولد هست چراکه باید چیزی باشه تا نابودی هم برای اون متصور شد.
اگر در جدول تولد کد اشخاص رو کلید اصلی در نظر بگیریم در جدول مرگ هم هر شخص فقط یکبار میتونه بمیره.
این یعنی اینکه کد شخصی که در جدول مرگ میاد (کلید خارجی) برای هر شخص فقط یکبار تکرار میشه که در چنین حالتی میشه کلید خارجی رو همون کلید اصلی در نظر گرفت.
در کل چنین حالتی خیلی کم بوجود میاد چراکه اکثر رابطه ها یک به چند هست.
در این زمینه حتما کتاب مطالعه کنید. این بحث ها نکات بسیار زیادی دارند که نمیشه در یک تاپیک یا در یک یا چند ویدئو به اون پرداخت.

veniz2008
شنبه 23 شهریور 1392, 19:29 عصر
ببخشید این پروژه ای که می نویسیم رو آخرش چه جوری باید روی سیستم دیگران منتقل کنیم ؟
بعد ما sql سیستم خودمون رو توی کد ها نوشتیم server=.... توی سیستم دیگران کانکشن رو وقتی اینجوری بنویسیم مشکلی پیش نمیاد؟!
در مورد کانکشن بارها و بارها در سایت بحث شده. کاش اول جستجو میکردی دوست عزیز.
بیاید با کانکشن و server ( سرویس دهنده) منطقی برخورد کنیم. به نظرتون آیا روی یک سیستم دیگه سرویس دهنده ای به نام md2008 وجود داره؟ قطعا نه!.
باید نامی رو به عنوان instance در جلوی server بنویسیم که وجود خارجی داشته باشه.
چندین راه وجود داره :
یکی اینکه روی سیستم مشتری یک sqlexpress که ورژنش حداقل مساوی با ورژنی باشه که باهاش دیتابیس رو روی سیستم خودتون ساختید.
راه دوم اینه که برای sql server ای که روی سیستم مشتری نصب میکنید یک instance خاص در نظر بگیرید. (مثل همون چیزی که روی سیستم خودتون دارید. مثلا من میتونم روی سیستم مقصد sql ای نصب کنم که نام instance اون md2008 باشه.در اینصورت برنامه بدرستی کار خواهد کرد که البته بسیار بدیهی هم هست).
راه بعدی اینه که همه instance های موجود بر روی سیستم مشتری رو با کدنویسی بدست بیارید و اونها رو یکی یکی تست کنید که کدوم instance جوابگو هست. این برای حالتی کاربرد داره که معمولا چند نسخه از sql server روی سیستم مقصد نصب هست و میخوایم ببینیم دیتابیس ما با کدوم instance کار میکنه.
نکته ای که در تمام این روش ها وجود داره اینه که ببینید دیتابیس شما روی کدوم instance نصب شده (Attach شده).
ساده ترین راه همون راه اول و استفاده از یک sqlexpress هست که در اینصورت کانکشن استرینگ رو میتونید بصورت زیر بنویسید:

server=.\\SQLEXPRESS;Database=univ;Integrated Security=True
یادتون نره کد بالا زمانی کار میکنه که دیتابیس روی سیستم مشتری Attach شده باشه. برای اتچ کردن دیتابیس هم روش های زیادی وجود داره. میتونی از اتچ خودکار استفاده کنی یا با دستورات sql دیتابیس رو اتچ کنید.
یک نمونه از اتچ خودکار و کانکشن استرینگ مربوطه بصورت زیر هست (باید دیتابیس رو در کنار فایل اجرایی برنامه در پوشه bin\debuge قرار بدید):

Data Source=(local)\\SQLEXPRESS;AttachDbFilename=|DataD irectory|\MyDatabaseName.mdf;Integrated Security=True
در این باره خیلی بحث شده که با جستجو به نتیجه خواهید رسید.
موفق باشید.

veniz2008
یک شنبه 24 شهریور 1392, 12:27 عصر
سلام
من ویدئوی شماره 1 رو دیدم خیلی خوب بود
یک سوال دارم
چرا بین جدول ها توی اس کیو ال سرور relatinship ایجاد نکردین ؟
سلام.
خوشحالم که ویدئو برای شما مفید بوده.
همونطور که در انتهای پست اول هم عرض کردم، در بعضی جاها ممکنه مطلبی در اون ویدئو (یا اون لحظه) فراموش بشه که یا در انتهای همون ویدئو یا در ابتدای ویدئوی بعدی اون مطلب گفته میشه.
حرف شما درباره برقراری ارتباط بین جداول صحیح هست. این کار در ابتدای ویدئوی دوم کامل توضیح داده میشه و ارتباط بین جداول رو در محیط sql برقرار می کنیم.
از توجه و نکته سنجی شما تشکر میکنم.
موفق باشید.

redflight
دوشنبه 25 شهریور 1392, 08:35 صبح
در مورد کانکشن بارها و بارها در سایت بحث شده. کاش اول جستجو میکردی دوست عزیز.
بیاید با کانکشن و server ( سرویس دهنده) منطقی برخورد کنیم. به نظرتون آیا روی یک سیستم دیگه سرویس دهنده ای به نام md2008 وجود داره؟ قطعا نه!.
باید نامی رو به عنوان instance در جلوی server بنویسیم که وجود خارجی داشته باشه.
چندین راه وجود داره :
یکی اینکه روی سیستم مشتری یک sqlexpress که ورژنش حداقل مساوی با ورژنی باشه که باهاش دیتابیس رو روی سیستم خودتون ساختید.
راه دوم اینه که برای sql server ای که روی سیستم مشتری نصب میکنید یک instance خاص در نظر بگیرید. (مثل همون چیزی که روی سیستم خودتون دارید. مثلا من میتونم روی سیستم مقصد sql ای نصب کنم که نام instance اون md2008 باشه.در اینصورت برنامه بدرستی کار خواهد کرد که البته بسیار بدیهی هم هست).
راه بعدی اینه که همه instance های موجود بر روی سیستم مشتری رو با کدنویسی بدست بیارید و اونها رو یکی یکی تست کنید که کدوم instance جوابگو هست. این برای حالتی کاربرد داره که معمولا چند نسخه از sql server روی سیستم مقصد نصب هست و میخوایم ببینیم دیتابیس ما با کدوم instance کار میکنه.
نکته ای که در تمام این روش ها وجود داره اینه که ببینید دیتابیس شما روی کدوم instance نصب شده (Attach شده).
ساده ترین راه همون راه اول و استفاده از یک sqlexpress هست که در اینصورت کانکشن استرینگ رو میتونید بصورت زیر بنویسید:

server=.\\SQLEXPRESS;Database=univ;Integrated Security=True
یادتون نره کد بالا زمانی کار میکنه که دیتابیس روی سیستم مشتری Attach شده باشه. برای اتچ کردن دیتابیس هم روش های زیادی وجود داره. میتونی از اتچ خودکار استفاده کنی یا با دستورات sql دیتابیس رو اتچ کنید.
یک نمونه از اتچ خودکار و کانکشن استرینگ مربوطه بصورت زیر هست (باید دیتابیس رو در کنار فایل اجرایی برنامه در پوشه bin\debuge قرار بدید):

Data Source=(local)\\SQLEXPRESS;AttachDbFilename=|DataD irectory|\MyDatabaseName.mdf;Integrated Security=True
در این باره خیلی بحث شده که با جستجو به نتیجه خواهید رسید.
موفق باشید.
مرسی
سوال من این بود که اگه من برنامه رو بخوام به کسی بدم و ایشون DB نداشته باشه چی ؟ منظور من این بود
اما درست میگید من باید اول خوب جستجو کنم بعد سوال کنم
بازم ببخشید....

redflight
سه شنبه 26 شهریور 1392, 17:18 عصر
سلام
من یه نسخه از سی دی های آموزشی sql گرفتم توی اون گفته که نسخه SQL Server EnterPrise Edition این فقط روی ویندوز های سرور نصب می شه
ویندوز من سرور نیست پس چرا روی سیستم من نصب شده؟

veniz2008
سه شنبه 26 شهریور 1392, 20:18 عصر
مرسی
سوال من این بود که اگه من برنامه رو بخوام به کسی بدم و ایشون DB نداشته باشه چی ؟ منظور من این بود

باید sql رو به هر طریقی که میتونید نصب کنید.
برای sql روی سیستم مشتری هم میتونید از sql express استفاده کنید و یا اینکه نسخه کامل رو نصب کنید (نسخه کامل برای یک سیستم تک کاربره معمولا نیاز نیست و همون express کفایت میکنه).
اینکه چطور sql رو نصب کنید روش های مختلفی داره. مثل ساخت فایل setup . یا نصب از راه دور یا اینکه شخصا در محل حاضر و اقدام به نصب کنید.


سلام
من یه نسخه از سی دی های آموزشی sql گرفتم توی اون گفته که نسخه SQL Server EnterPrise Edition این فقط روی ویندوز های سرور نصب می شه
ویندوز من سرور نیست پس چرا روی سیستم من نصب شده؟
اینها رو ببینید :
http://barnamenevis.org/showthread.p...ght=Enterprise (http://barnamenevis.org/showthread.php?373213-%DA%A9%D8%AF%D8%A7%D9%85-%D9%86%D8%B3%D8%AE%D9%87-sql2012-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D9%84%D8%A7%DB%8C%D9%86%D8%AA-%D9%85%D9%86%D8%A7%D8%B3%D8%A8-%D8%A7%D8%B3%D8%AA&highlight=Enterprise)
و
http://stackoverflow.com/questions/1...006823#1006823 (http://stackoverflow.com/questions/1006773/sql-server-2005-enterprise-on-windows-7/1006823#1006823)

esafb52
چهارشنبه 27 شهریور 1392, 22:18 عصر
به سلام به دوست و استاد عزیزم ونیز 2008
من قسمت نه رو تازه دیدم به نظرم اومد این قد اون حلقه های فور و وایل و اون ایف و الس ها و...زیادی شلوغ شده بود و فکر کنم مقداری بر پرفرمنس و کارایی برنامه زیاد جالب نباشه من خودم این قسمت رو با این صورت پیاده کردم
ما یه دیتا تیبل داریم که سطرهایی رو برگشت داده که در یک گروپ ادی هستن حالا ما به ترتیب اون سطرها هم کاری نداریم که مثلا یکی ایدیش 2 باشه یا صد
مثلا ده سوال میخوایم به صورت تصادفی انتخاب کنیم یه متد رندوم مینویسیم و چون همیشه دیتا تیبل از سطر صفرم شروع میشه ورودی متد رندوممون رو پارامترش اولش رو صفر و پارامتر دوم تعداد سوال درخواستی منهای یک) تمام بعد چند تا تکس باکس و یک آرایه از جنس اینت تعریف میکنیم و مقادیر تصادفی رو که به سطرهای دیتا تیبل اشاره میکنن از اون میخونیم (سطر دلخواه رو از آرایه میخونیم که مقادیر تصادفی درش ذخیره شده)اگه خواستین در کد منظورم رو نشون میدم کدهام خیلی ساده تر میشه دلیل استفاده ازدستور سلکت با این رو هم متوجه نشدم؟؟؟

veniz2008
چهارشنبه 27 شهریور 1392, 22:54 عصر
به سلام به دوست و استاد عزیزم ونیز 2008
من قسمت نه رو تازه دیدم به نظرم اومد این قد اون حلقه های فور و وایل و اون ایف و الس ها و...زیادی شلوغ شده بود و فکر کنم مقداری بر پرفرمنس و کارایی برنامه زیاد جالب نباشه من خودم این قسمت رو با این صورت پیاده کردم
ما یه دیتا تیبل داریم که سطرهایی رو برگشت داده که در یک گروپ ادی هستن حالا ما به ترتیب اون سطرها هم کاری نداریم که مثلا یکی ایدیش 2 باشه یا صد
مثلا ده سوال میخوایم به صورت تصادفی انتخاب کنیم یه متد رندوم مینویسیم و چون همیشه دیتا تیبل از سطر صفرم شروع میشه ورودی متد رندوممون رو پارامترش اولش رو صفر و پارامتر دوم تعداد سوال درخواستی منهای یک) تمام بعد چند تا تکس باکس و یک آرایه از جنس اینت تعریف میکنیم و مقادیر تصادفی رو که به سطرهای دیتا تیبل اشاره میکنن از اون میخونیم (سطر دلخواه رو از آرایه میخونیم که مقادیر تصادفی درش ذخیره شده)اگه خواستین در کد منظورم رو نشون میدم کدهام خیلی ساده تر میشه دلیل استفاده ازدستور سلکت با این رو هم متوجه نشدم؟؟؟
سلام دوست من.
اختیار دارید ما هنوز شاگردیم و داریم یاد می گیریم.
قصد داشتم تا گذاشتن ویدئوی دهم سکوت کنم و چیزی نگم (محتوای پروژه لو نره :لبخند: ) به همین خاطر اونجا که ویدئو نهم رو گذاشتم گفتم توجه مهم.
حرف شما کاملا درسته که این روش روش بهینه ای نیست مخصوصا زمانیکه تعداد سوالات زیاد میشه.به همین خاطر هست که در ویدئوی دهم یک روش فوق العاده سریع و بهینه رو معرفی میکنم و هدفم این هست که دوستان فرق بین یک راه غیر بهینه و یک راه بهینه و کارآمد رو کاملا لمس کنن. چراکه تا چیزی به عینه مشاهده نشه آدم نمیتونه کاملا اونو لمس و درک کنه.
اما در مورد روش شما :
مقادیر تصادفی که در آرایه ذخیره میشه مهم هست. مشکلی که این روش داره و دلیل اصلی کند شدن هم هست فقط یه چیز هست : تابع رندوم در هر مرحله عددی رو تولید میکنه که ممکنه در مرحله قبلی اون عدد تولید شده باشه. زمانیکه تعداد سوالات زیاد میشه احتمال و درصد تولید این عدد تکراری زیاد میشه که باعث کاهش performance میشه.
در مورد select IN که پرسیدید بخاطر این هست که id هایی که از حلقه بدست اومده رو از جدول بکشه بیرون. البته راه ساده تری هم وجود داشت و اون هم فیلتر کردن همون دیتاتیبلی هست که کل سوالات داخلش وجود داره ولی قصدم این بود که دوستان با دستور IN هم آشنا بشن.
خوشحال میشم کدها و روشتون رو بصورت کامل بگید تا بهتر بشه دربارش بحث کنیم.

esafb52
چهارشنبه 27 شهریور 1392, 23:48 عصر
من ابتدا از این کلاس رندوم استفاده کردم
public static class RndomNumber
{
//کلاس اعداد رندوم
public static int[] GetRandomIndex(int MinValue, int MaxValue)
{
List<int> RtnList = new List<int>();
Random R = new Random();
int Cnt = 0;
while (Cnt < MaxValue - MinValue + 1)
{
int r = R.Next(MinValue - 1, MaxValue + 1);
if (BetWeen(r, MinValue, MaxValue) && !RtnList.Contains(r))
{
RtnList.Add(r);
Cnt++;
}
}
return RtnList.ToArray();
}
public static bool BetWeen(object MainValue, object Value1, object Value2)
{
decimal TmpMainValue = Convert.ToDecimal(MainValue);
decimal TmpValue1 = Convert.ToDecimal(Value1);
decimal TmpValue2 = Convert.ToDecimal(Value2);
return (TmpValue1 <= TmpMainValue && TmpMainValue <= TmpValue2);
}



}
و بعد این طوری ازش استفاده کردم
//برای دریافت تعداد سوالات و شروع آزمون
private void btnShowQestions_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
errorProvider1.SetError(textBox1, "لطفا تعداد سوالات رو وارد نمایید");
return;
}
errorProvider1.Clear();
int a = Convert.ToInt32(comboBox1.SelectedValue.ToString() );
Qcount = Convert.ToInt32(textBox1.Text);
if (db.QuestionCount(a, Qcount, out dt))
{
randomQuestion = RndomNumber.GetRandomIndex(0, Qcount - 1);
timer1.Enabled = true;
textBox2.Text = dt.Rows[randomQuestion[0]][1].ToString();
textBox3.Text = dt.Rows[randomQuestion[0]][2].ToString();
textBox4.Text = dt.Rows[randomQuestion[0]][3].ToString();
textBox5.Text = dt.Rows[randomQuestion[0]][4].ToString();
textBox6.Text = dt.Rows[randomQuestion[0]][5].ToString();
btnShowQestions.Enabled = false;
}
else
{
MessageBox.Show("این تعداد سوال وجود در این گروه موجود نمی باشد!!");
}
}

و برای رفتن به سوالات بعدی هم
//...برای رفتن به سوال بعدی که البته هنوز به طور کامل پیاده سازیش نکردم مثلا جواب رو نگرفتم و....
private void btnnextQuestion_Click(object sender, EventArgs e)
{
textBox2.Text = dt.Rows[randomQuestion[randomQuestionindex]][1].ToString();
textBox3.Text = dt.Rows[randomQuestion[randomQuestionindex]][2].ToString();
textBox4.Text = dt.Rows[randomQuestion[randomQuestionindex]][3].ToString();
textBox5.Text = dt.Rows[randomQuestion[randomQuestionindex]][4].ToString();
textBox6.Text = dt.Rows[randomQuestion[randomQuestionindex]][5].ToString();
//به علت اینکه محتوای آرایهrandomQuestion به صورت رندم هست کافیست تا فقط بین عناصر اون حرکت کنیم
randomQuestionindex++;
if (randomQuestionindex > Qcount)
{
MessageBox.Show("اتمام آزمون");
//نمایش نتایج و انام کارهای دلخواه
}
}
یعنی کد فرمم این طوری هست
using System;
using System.Data;
using System.Windows.Forms;

namespace MYAZMOON
{
public partial class FrmRunExam : Form
{
private readonly bal db = new bal();
private int Qcount;
private DataTable dt = new DataTable();
private int m;
private int[] randomQuestion;
private int randomQuestionindex = 1;
private int s;

public FrmRunExam()
{
InitializeComponent();
}

private void FrmRunExam_Load(object sender, EventArgs e)
{
DataTable dataTable = db.loadqusetiongroup();
comboBox1.DataSource = dataTable;
comboBox1.DisplayMember = "GROUPNAME";
comboBox1.ValueMember = "GROUPID";
}

//برای دریافت تعداد سوالات و شروع آزمون
private void btnShowQestions_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBox1.Text))
{
errorProvider1.SetError(textBox1, "لطفا تعداد سوالات رو وارد نمایید");
return;
}
errorProvider1.Clear();
int a = Convert.ToInt32(comboBox1.SelectedValue.ToString() );
Qcount = Convert.ToInt32(textBox1.Text) ;
if (db.QuestionCount(a, Qcount- 1, out dt))
{
//منظور از صفر در اینجا سطر اول دیتا تیبل هست که با صفرشروع میشه
randomQuestion = RndomNumber.GetRandomIndex(0, Qcount);
timer1.Enabled = true;
textBox2.Text = dt.Rows[randomQuestion[0]][1].ToString();
textBox3.Text = dt.Rows[randomQuestion[0]][2].ToString();
textBox4.Text = dt.Rows[randomQuestion[0]][3].ToString();
textBox5.Text = dt.Rows[randomQuestion[0]][4].ToString();
textBox6.Text = dt.Rows[randomQuestion[0]][5].ToString();
btnShowQestions.Enabled = false;
}
else
{
MessageBox.Show("این تعداد سوال وجود در این گروه موجود نمی باشد!!");
}
}

//برای گرفتن نتیجه آزمون
public int chekresult()
{
int result = 0;
if (radioButton1.Checked)
{
result = 1;
}
else if (radioButton2.Checked)
{
result = 2;
}
else if (radioButton3.Checked)
{
result = 3;
}
else if (radioButton4.Checked)
{
result = 4;
}
else
{
result = 0;
}
return result;
}

//...برای رفتن به سوال بعدی که البته هنوز به طور کامل پیاده سازیش نکردم مثلا جواب رو نگرفتم و....
private void btnnextQuestion_Click(object sender, EventArgs e)
{
textBox2.Text = dt.Rows[randomQuestion[randomQuestionindex]][1].ToString();
textBox3.Text = dt.Rows[randomQuestion[randomQuestionindex]][2].ToString();
textBox4.Text = dt.Rows[randomQuestion[randomQuestionindex]][3].ToString();
textBox5.Text = dt.Rows[randomQuestion[randomQuestionindex]][4].ToString();
textBox6.Text = dt.Rows[randomQuestion[randomQuestionindex]][5].ToString();
//به علت اینکه محتوای آرایهrandomQuestion به صورت رندم هست کافیست تا فقط بین عناصر اون حرکت کنیم
randomQuestionindex++;
if (randomQuestionindex > Qcount)
{
MessageBox.Show("اتمام آزمون");
//نمایش نتایج و انام کارهای دلخواه
}
}

private void timer1_Tick(object sender, EventArgs e)
{
//برای زمان ده دقیقه ای آزمون
s = Convert.ToInt32(label4.Text);
m = Convert.ToInt32(label5.Text);
if (m != 10)
{
s++;
if (s == 60)
{
s = 0;
m++;
label5.Text = m.ToString("00");
}
label4.Text = s.ToString("00");
}
else
{
timer1.Stop();
MessageBox.Show("time end");
MessageBox.Show("اتمام آزمون");
}
}
}
}

veniz2008
پنج شنبه 28 شهریور 1392, 01:13 صبح
فعلا فقط متدی که باهاش اعداد تصادفی تولید میکردید رو دیدم.
روش جالب و خوبی بود ولی بازم 100 درضد بهینه نیست چون متد رندوم در هر مرحله اعدادی رو تولید میکنه که احتمال داره قبلا تولید شده باشه به همین خاطر هست که با RtnList مقایسه میشه که آیا قبلا در لیست وارد شده یا نه. ولی میشد کوتاه ترش هم کرد و شرط هاش رو کمتر کرد و همچنین نیازی به متد Between هم نیست چون عدد تولید شده در متد رندوم خارج از محدوده ای که بهش میدیم نیست.
در متد next متوجه نشدم چرا minvalue رو منهای 1 کرده بودی.

public static int[] GetRandomIndex(int MinValue, int MaxValue)
{
List<int> RtnList = new List<int>();
Random R = new Random();
int Cnt = 0;
while (Cnt < MaxValue - MinValue + 1)
{
int r = R.Next(MinValue , MaxValue + 1);
if (!RtnList.Contains(r))
{
RtnList.Add(r);
Cnt++;
}
}
return RtnList.ToArray();
}

veniz2008
شنبه 30 شهریور 1392, 10:05 صبح
باسلام
اگر محتویات یک جدول از یه بانک مثلا 5000 رکورد باشه ایا هنگام بازکردن یه فرم که با یه گرید نشون داده خواهد شد تاخیر زمانی زیادی خواهد داشت ؟
سلام.
در مورد تاخیر (یا کند شدن برنامه) بستگی به میزان رم سیستم و حجم داده های لود شده داره. ممکنه هر رکورد شامل 4 یا 5 فیلد ساده باشه یا نه ممکنه شامل فیلدهای با حجم بالا مثل عکس های با کیفیت بالا باشه (خود عکس ذخیره شده باشه نه آدرسش).
اما نکته ای که وجود داره اینه که لود کردن یکباره 5000 رکورد و نمایش اون در گرید عملا برای مخاطب فایده و کاربردی نداره. بهترین راه اینه که برای جلوگیری از کند شدن برنامه در چنین حالاتی از صفحه بندی کردن گرید (paging) استفاده کنید و در هر بار مثلا 30 تا رکورد رو به مخاطب نمایش بدید و با زدن دکمه "بعدی" 30 رکورد بعدی رو بهش نمایش بدید. قبلا در سایت در این باره خیلی بحث شده و نمونه برنامه هایی هم قرار داده شده که با جستجو می تونید اونها رو پیدا کنید.
موفق باشید.

veniz2008
چهارشنبه 03 مهر 1392, 09:22 صبح
سلام دوست عزیز
با تشکر از آموزش خوبتون
ممنون می شم پشنیبانگیری وبازیابی را تو پروژه بزارید
تحت شبکه توضیح بدید ممنون می شم.
سلام دوست عزیز.
بهتر بود درخواست تون رو بصورت پیغام خصوصی مطرح می کردید.
عملیات های Backup و Restore در ویدئوهای بعدی بصورت کامل قرار می گیرن.
در مورد شبکه کردن نرم افزار (یا به بیان بهتر شبکه کردن دیتابیس) هم در انتهای مجموعه آموزشی بصورت کامل توضیح داده خواهد شد.
موفق باشید.

veniz2008
یک شنبه 07 مهر 1392, 00:01 صبح
با سلام مجدد به دوست و استاد عزیز veniz 2008 و تشکر از آموزش های خوبشون
من چندی وقتی درگیر بودم و کمتر سر میزدم ولی امروز قسمت دهم و یازدهم ویدیو رو به دقت تماشا کردم خصوصا قسمت مربوط به دستور newid() خیلی برام جالب بود و همون طور که تو فیلم هم گفتین ماباید sql و دستوراتش رو جدی تر بگیریم راستش من قبلا تصور این بود که فقط همون چهارتا دستور اصلی sql + بکاپ و ریستور رو یادبرگیریم کافیه حالا بقول خیام میبینم که ما هنوز اندر خم یک کوچه ایم ممنون ام

موفق باشید
سلام دوست من.
من قبلا (حدود 14 ماه پیش) یک فایل حاوی دستورات SQL رو در اختیار دوستان قرار داده بودم. این فایل pdf از نظر روانی متن و شیوایی واقعا عالی ترجمه شده. احتمال خیلی زیاد بسیاری از دوستان از وجود چنین فایل آموزشی بی خبر باشند!.
این فایل pdf بسیاری از دستورات مربوط به محیط SQL رو به زبان خیلی ساده و روان و همراه با ذکر مثال های فراوان ذکر کرده.
خوبی این فایل اینه که بسیاری از دستورات SQL رو در یک فایل با ذکر مثال های متعدد در اختیار خواهید داشت.
به همه دوستان توصیه میکنم حتما این فایل آموزشی رو نگاه کنن.
http://barnamenevis.org/showthread.php?351151-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D9%86%DB%8C%D8%AF-%DA%A9%D8%A7%D9%85%D9%84%D8%AA%D8%B1%DB%8C%D9%86-%D9%88-%D9%BE%D8%B1%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%D 8%AA%D8%B1%DB%8C%D9%86-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-SQL-%28-%D8%AC%D8%AF%DB%8C%D8%AF-%29

veniz2008
یک شنبه 07 مهر 1392, 11:02 صبح
یک چیز رو یادم رفت بگم به نظر من پر کردن لیست باکس با اون صفر در اون حلقه فور لازم نیس ما حین رفتن به هر سوال میتونیم جواب رو در لیست باکس درج و در انتها مقایسه انجام بدیم !!اگر دلایل بیشتری وجود داره ممنون میشم بگین

وجود اون حلقه لازم هست.
فرض بگیرید کاربر 2 سوال رو با محدودیت زمانی انتخاب میکنه ولی بعد از نمایش سوالات به هیچ سوالی پاسخ نمیده تا زمانش به اتمام برسه. در این حالت موقع چک کردن جواب سوالات از خط زیر خطا میگیره که چنین آیتمی درون لیست باکس وجود نداره (چنین ایندکسی وجود نداره).

if (Convert.ToInt32(mylistanswer.Items[i]) == Convert.ToInt32(dt.Rows[i]["Answer"].ToString()))
{
sahih++;
}

عکس خطا :

111305

veniz2008
یک شنبه 07 مهر 1392, 13:40 عصر
خب با روشی که مد نظرم هست یه متد مینویسم و اگر جواب نداد 0درج میکنیم در انتها هم با یه ifچک میکنیم و بعد تبدیل میکنیم راستی چرا از لیست ها استفاده نکردین منظورم جنریک هاست یا حتی یه ارایه ؟ بجای لیست باکس
من روش شما رو نمیدونم چی هست.
من طبق کدهای پروژه خودمون مطلب رو توضیح دادم.
برای این کار ضرورتی به استفاده از آرایه و ... ندیدم.
موفق باشید.

esafb52
چهارشنبه 10 مهر 1392, 08:57 صبح
با سلام و تشکر از آموزش های خوبتون راستش من قسمت بکاپ رو دیدم والبته این روش رو برای اولین بار هم میدیدم

cmd.BeginExecuteNonQuery()
cmd.EndExecuteNonQuery()

ولی نمیدونم چرا از sp ها در اکسپرس نمیتونم حین بکاپ استفاده کنم وخطا میده (مثلا این دستور وجود نداره و...)ولی از دستوراتی کامندتکس معمولی راحت استفاده میکنم در ضمن این متد هم جالب بود

this.BeginInvoke((MethodInvoker) delegate()
{
progressBar1.Value = 0;

});
cmd.Dispose();

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

veniz2008
چهارشنبه 10 مهر 1392, 12:01 عصر
با سلام و تشکر از آموزش های خوبتون راستش من قسمت بکاپ رو دیدم والبته این روش رو برای اولین بار هم میدیدم

cmd.BeginExecuteNonQuery()
cmd.EndExecuteNonQuery()

ولی نمیدونم چرا از sp ها در اکسپرس نمیتونم حین بکاپ استفاده کنم وخطا میده (مثلا این دستور وجود نداره و...)ولی از دستوراتی کامندتکس معمولی راحت استفاده میکنم در ضمن این متد هم جالب بود

this.BeginInvoke((MethodInvoker) delegate()
{
progressBar1.Value = 0;

});
cmd.Dispose();

به نظرم اگر حین بکاپ از شی پروگرس بار هم استفاده میکردین جالب تر هم میشد
تشکر از آموزش های خوبتون
موفق باشید
قبل از اینکه به سوال شما بپردازم قصد دارم یه کم درد دل کنم.
ببیند من الان حدود 36 ساعت هست که ویدئوی دوازدهم رو آپلود کردم ولی متاسفانه هنوز تاپیک باز نشده که پستم رو بذارم. روی سخن من و انتقاد من به مدیران بخش نیست اتفاقا جا داره از زحمات بسیار زیاد دوست عزیزم جناب صفا بسیار تشکر کنم که انصافا همکاری بسیار خوبی رو با من داشتن.
روی سخن من با بعضی از کاربران سایت هست. اگر شعور و درک بعضی از این دوستان اونقدر پایین نبود که هر جایی بی جهت پست بذارن و بیهوده تاپیک رو منحرف کنن مطمئن باشید من هیچوقت تصمیم نمی گرفتم که تاپیک ویدئوها رو بعد از قرار دادن هر ویدئو قفل کنم. متاسفانه بعضی ها انگار نمیخوان بزرگ بشن و به مانند یک فرد فهمیده تو این جامعه زندگی کنن.
چه کسی ضرر میکنه؟ چند نفر بی توجهی و بی انضباطی میکنن ولی خیلی ها متضرر میشن.
ویدئویی که باید 36 ساعت قبل در اختیار دوستان قرار میگرفته به ناچار باید منتظر موند تا تاپیک باز بشه تا پست جدید قرار بگیره.
به نظرتون جای تاسف نداره؟
به خدا باید گریه کرد به وضعیت فهم و شعور بعضی از این مردم توی این مملکت.
دوست عزیزم جناب esafb52 :
کاش متن خطا (و چه بهتر که یک عکس از خطا) بذارید تا بهتر متوجه منظورتون بشم تا بهتر بشه بررسی رو انجام داد.
آیا خطایی که گفتید فقط در مورد sp مربوط به backup هست؟ یا برای همه sp ها؟
در مورد progressbar هم بله میتونه امکان خوبی باشه. خیلی از موارد رو میشه به قسمت های مختلف اضافه کرد ولی چون وقت ویدئوها محدود هست در هر فرمی و برای هر عملیاتی معمولا چارچوب اصلی کار توضیح داده میشه و از کارهای جانبی و تزئینی معمولا اجتناب کردم که دوستان میتونن خودشون این موارد رو به پروژه هاشون اضافه کنن.

esafb52
چهارشنبه 10 مهر 1392, 13:47 عصر
با سلام مثلا این کد جواب میده
SqlCommand cmd = new SqlCommand();
string connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath +
"\\DBAZMOON.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
cmd.Connection = new SqlConnection(connection);
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + saveFileDialog.FileName + "'";
cmd.Connection = new SqlConnection(
"Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
ولی برای sp کد بعدی خطا عدم وجود این sp رو میده
string connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath +
"\\DBAZMOON.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection con = new SqlConnection(connection);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.Connection.Open();
string db = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
cmd.Connection = new SqlConnection(
"Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.CommandText = "myBACKUP";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@path", txtpath.Text + ".bak");
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK,
MessageBoxIcon.Information);

veniz2008
چهارشنبه 10 مهر 1392, 21:25 عصر
با سلام مثلا این کد جواب میده
SqlCommand cmd = new SqlCommand();
string connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath +
"\\DBAZMOON.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
cmd.Connection = new SqlConnection(connection);
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + saveFileDialog.FileName + "'";
cmd.Connection = new SqlConnection(
"Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
ولی برای sp کد بعدی خطا عدم وجود این sp رو میده
string connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath +
"\\DBAZMOON.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection con = new SqlConnection(connection);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.Connection.Open();
string db = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
cmd.Connection = new SqlConnection(
"Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.CommandText = "myBACKUP";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@path", txtpath.Text + ".bak");
cmd.Connection.Open();
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK,
MessageBoxIcon.Information);
با بقیه sp ها هم همین مشکل رو داری؟ مثلا با sp مربوط به select یا insert هم همین مشکل رو داری؟
لطف کن یه عکس از خطا بگیر و بذار.
راستی کدنویسی رو خیلی سخت کردی!. راحت تر کد بزن دوست من.

esafb52
چهارشنبه 10 مهر 1392, 22:56 عصر
نه متاسفانه همین الان از دریا امدم و خسته هستم فردا سعی میکنم عکس هم بذارم ولی نه فقط برای همین بکاپ خطا میده ایا اصلا روند کلی درست هست کد بالا برای اون حالت اول درست جواب میده ولی حالت دوم نه دیتابیس 2008اکسپرس هستش

veniz2008
چهارشنبه 10 مهر 1392, 23:17 عصر
خسته نباشی.
اول تست کن ببین واقعا چنین sp رو با sqlexpress بهش دسترسی داری یا نه. برای این منظور با sqlexpress این select رو بزن و نتیجه sp های برگشتی رو بررسی کن ببینم اصلا اون sp وجود داره یا نه :


select * from DBAzmoon.information_schema.routines
where routine_type = 'PROCEDURE'

esafb52
پنج شنبه 11 مهر 1392, 09:55 صبح
با سلام بله تمام استور پروسجورها رو برگشت داد ولی من اون رو از داخل منجمنت استدیو اجرا کردم این هم عکس خطا
111427
111428

veniz2008
پنج شنبه 11 مهر 1392, 12:04 عصر
بله تمام استور پروسجورها رو برگشت داد ولی من اون رو از داخل منجمنت استدیو اجرا کردم

ببینید وقتی به management studio ورود می کنید با چه server name ای ورود می کنید؟ (عکس رو بیین) :
111444

در این عکس من دارم با sqlexpress ورود می کنم نه با server name اصلی برنامم.
طبیعی هست که اگر با server name اصلی ورود کنم لیست همه sp ها رو به من برگشت میده.
یا با express ورود کن و اون select رو اجرا کن یا کلا از کدنویسی استفاده کن :
sp :

create proc SelectAllStoredProcedure
AS
select * from DBAzmoon.information_schema.routines
where routine_type = 'PROCEDURE'
درون ویژوال :

SqlConnection con = new SqlConnection("server = .\\SQLEXPRESS;DataBase = DBAzmoon;Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("SelectAllStoredProcedure", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
dt = new DataTable();
da.Fill(dt);
GrdAllSp.DataSource = dt;
توجه داشته باش که این sp رو در express ایجاد کنی چراکه server شما در کانکشن استرینگ نسخه express هست که بایستی به این sp دسترسی داشته باشه تا بتونه اونو اجرا کنه.

esafb52
پنج شنبه 11 مهر 1392, 19:44 عصر
با سلام منم دقیقا مثلا شما اجرا کردم ولی خطا میداد چطور برای بقیه spها خطا نداد بهم فقط برای همین خطا میده!!!!!!!
این هم عکس اگر امکانش هست شما نحوه پیاده سازی کد بکاپ رو سمت سی شارپ یه مثال ساده بزنین با فرض دیتابیس اکسپرس
111460

veniz2008
پنج شنبه 11 مهر 1392, 23:06 عصر
با سلام منم دقیقا مثلا شما اجرا کردم ولی خطا میداد چطور برای بقیه spها خطا نداد بهم فقط برای همین خطا میده!!!!!!!
این هم عکس اگر امکانش هست شما نحوه پیاده سازی کد بکاپ رو سمت سی شارپ یه مثال ساده بزنین با فرض دیتابیس اکسپرس
111460
ببینید فرقی نداره.
اکسپرس هم مثل نسخه کامل یک موتور (engin) هست با یکسری محدودیت ها.
قرار نیست کار خاصی کنیم یا اینکه کد جدیدی بنویسیم. کدها همون ها هستن فقط سرویس دهنده ما (server) تبدیل به sqlexpress شده. همین.
کد رو که قرار دادم براتون.
شما گفتید که با express میتونید بقیه sp ها رو اجرا کنید. حالا با همین اکسپرس لیست همه sp ها رو بگیرید (فرض کنید دارید یک sp مربوط به select رو اجرا می کنید). نتیجه رو ببینید آیا اون sp وجود داره یا نه.
من احساس میکنم شما اون sp مربوط به بک اپ رو به جمع sp هایی که در اکسپرس هست اضافه نکردید یا نام sp رو در نوشتن دقت نکردید!
من تا حالا چنین موردی رو نداشتم که همه sp ها رو بشناسه ولی یک sp رو نشناسه.

esafb52
یک شنبه 14 مهر 1392, 22:30 عصر
من کلا با بکاپ و ریستور با Sp مشکل دارم
متن خطا :
////////
---------------------------

---------------------------
User does not have permission to alter database 'DBAZMOON', the database does not exist, or the database is not in a state that allows access checks.

ALTER DATABASE statement failed.

The file 'D:\MY AZMOON\MYAZMOON\MYAZMOON\bin\Debug\DBAZMOON.mdf' cannot be overwritten. It is being used by database 'D:\MY AZMOON\MYAZMOON\MYAZMOON\BIN\DEBUG\DBAZMOON.MDF'.

File 'DBAZMOON' cannot be restored to 'D:\MY AZMOON\MYAZMOON\MYAZMOON\bin\Debug\DBAZMOON.mdf'. Use WITH MOVE to identify a valid location for the file.

The file 'D:\MY AZMOON\MYAZMOON\MYAZMOON\bin\Debug\DBAZMOON_log.ld f' cannot be overwritten. It is being used by database 'D:\MY AZMOON\MYAZMOON\MYAZMOON\BIN\DEBUG\DBAZMOON.MDF'.

File 'DBAZMOON_log' cannot be restored to 'D:\MY AZMOON\MYAZMOON\MYAZMOON\bin\Debug\DBAZMOON_log.ld f'. Use WITH MOVE to identify a valid location for the file.

Problems were identified while planning for the RESTORE statement. Previous messages provide details.

RESTORE DATABASE is terminating abnormally.

User does not have permission to alter database 'DBAZMOON', the database does not exist, or the database is not in a state that allows access checks.

ALTER DATABASE statement failed.
---------------------------
OK
---------------------------

/////////

این کد sp ریستور

ALTER PROC RESTOREDB
@PATH NVARCHAR(400)
AS
ALTER DATABASE DBAZMOON SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE DBAZMOON FROM DISK=@PATH WITH REPLACE
ALTER DATABASE DBAZMOON SET ONLINE
RETURN

این هم کد سمت سی شارپ

try
{
SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DBAZMOON.mdf;Integrated Security=True;User Instance=True");
SqlCommand cmd = new SqlCommand("RESTOREDB", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PATH", path);
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
MessageBox.Show("restore Test ok");
}
catch (SqlException ex)
{

MessageBox.Show(ex.Message);
}

و دیتابیس رو هم ضمیمه کردم
اگه امکان داره یه نمونه ساده بذارین که منم کدهای شما رو تست کنم
ممنون

veniz2008
دوشنبه 15 مهر 1392, 02:51 صبح
User does not have permission to alter database 'DBAZMOON', the database does not exist, or the database is not in a state that allows access checks.

من 2 حالت مختلف رو برای این خطا در نظر می گیرم. ابتدا احتمال اول رو مطرح میکنم اگر این مورد رو رعایت کردید بگید تا در مورد احتمال دوم هم صحبت کنیم.
الف) شما دیتابیس رو به SQL Express اضافه نکردید به همین خاطر هست که زمانیکه کانکشن استرینگ و server رو بر روی sqlexpress تنظیم می کنید خطای وجود نداشتن دیتابیس رو صادر میکنه.

111575

اضافه کردن یک دیتابیس به SQL Express و مشاهده جدول (ها) (همان دیتابیسی که قصد بک آپ و ری استور را از آن داریم)
111574

نمایی از پروسیجرهای Backup & Restore :

111571

پیغام موفقیت آمیز بودن عملیات بک آپ با استفاده از کانکشن استرینگی که server آن SQLExpress می باشد :
111572

آیا شما دیتابیس DBAzmoon رو به SQL Express وارد کردید؟

bitcob589
دوشنبه 15 مهر 1392, 16:27 عصر
در زمان استفاده از کد زیر خطا نمایش داده می شود

((DataRowView)comgroup.SelectedItem)["id"]

خطای زیر نمایش داده می شود

Unable to cast object of type 'myazmoon.TBLGROUP' to type 'System.Data.DataRowView'.

علت خطا چیست

veniz2008
دوشنبه 15 مهر 1392, 18:43 عصر
در زمان استفاده از کد زیر خطا نمایش داده می شود

((DataRowView)comgroup.SelectedItem)["id"]

خطای زیر نمایش داده می شود


علت خطا چیست
چیزی که مشخص هست برنامه قادر به تبدیل کردن آیتم انتخاب شده به جنس datarowview نیست.
کدی که در اون خطا رخ میده رو بصورت کامل قرار بدید.
همچنین کدی رو که باهاش کمبو رو پر می کنید قرار بدید.

negar.rafie
دوشنبه 15 مهر 1392, 19:29 عصر
میشه سورس پروژه را هم بزارید

esafb52
دوشنبه 15 مهر 1392, 21:03 عصر
با سلام و تشکر از جناب ونیز 2088 بابت آموزش خوب و جواب های سریع و مناسبشون
امروز یکم وقت بیشتری داشتم و نشستم ببینم مشکل از کجاس
چون تعجب میکردم که چطور تمام sp ها اجرا میشدن ولی این یکی نه !!!!!!!!
تازه متوجه یک نکته شدم من کانکشن استرینگ از نوع اتچ خودکار بود یعنی اینطوری:
SqlCommand cmd = new SqlCommand();
string connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath +
"\\DBAZMOON.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

با این حالت تمام sp جز بکاپ و ریستور درست اجرا میشدن
وقتی کانکشن استرینگ اینو رو تبدیل به این کردم درست نمیشد
public SqlConnection con = new SqlConnection
(@"Data Source=.\SQLEXPRESS;Initial Catalog=DBAZMOON;Integrated Security=True");
بعد دیتابیس رو هم در سرور sql اتچ کردم درست شد ولی یک نکته داشت دیتابیس باید به صورت بقیه دیتابیس ها لیست میشد یعنی آدرس محل قرار گرفتنش تو لیست نمایش داده نمیشد هر وقت نشون میداد مثلا درایو d و پوشه فلان /...... درست نمیشد ولی وقتی که فقط اسمش بود(مسیرش ذکر نمیشد) درست شد و sp بکاپ و ریستور هم به درستی اجرا شدن !!!!حالا یک سوال مطرح میشه اگه بخوام کانکشن استرینگ رو به صورت اولی ست کنم که خودش اتچش کنه باید در sp چه تغییری بدم تا مثل بقیه اجرا بشه
ممنون

veniz2008
سه شنبه 16 مهر 1392, 13:09 عصر
میشه سورس پروژه را هم بزارید
دلیل اینکه سورس رو نذاشتم این هست که برای دوستان مبتدی بسیار محتمل هست که به جای تایپ کدها دست به copy & paste بزنند. در این حالت محاله که شخصی بتونه مسلط بشه.
هدف این هست که دوستان بعد از مشاهده ویدئوها، با توجه به درکی که از کدها پیدا میکنن شخصا اقدام به تایپ کدها کنن چراکه زمانیکه یک دستور رو متوجه میشیم و بعد اونو در طول پروژه چندین بار تایپ می کنیم به اون کدها مسلط می شیم.


تازه متوجه یک نکته شدم من کانکشن استرینگ از نوع اتچ خودکار بود یعنی اینطوری:
SqlCommand cmd = new SqlCommand();
string connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath +
"\\DBAZMOON.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

با این حالت تمام sp جز بکاپ و ریستور درست اجرا میشدن
وقتی کانکشن استرینگ اینو رو تبدیل به این کردم درست نمیشد
public SqlConnection con = new SqlConnection
(@"Data Source=.\SQLEXPRESS;Initial Catalog=DBAZMOON;Integrated Security=True");
بعد دیتابیس رو هم در سرور sql اتچ کردم درست شد ولی یک نکته داشت دیتابیس باید به صورت بقیه دیتابیس ها لیست میشد یعنی آدرس محل قرار گرفتنش تو لیست نمایش داده نمیشد هر وقت نشون میداد مثلا درایو d و پوشه فلان /...... درست نمیشد ولی وقتی که فقط اسمش بود(مسیرش ذکر نمیشد) درست شد و sp بکاپ و ریستور هم به درستی اجرا شدن !!!!حالا یک سوال مطرح میشه اگه بخوام کانکشن استرینگ رو به صورت اولی ست کنم که خودش اتچش کنه باید در sp چه تغییری بدم تا مثل بقیه اجرا بشه

یکی از مواردی که شخصا بدم از اتچ خودکار میاد همین تغییر نام دادن دیتابیس بعد از اتچ کردن هست که در مواردی مثل Backup و Restore و کلا هر کوئری که در اون نام دیتابیس رو ذکر می کنید به مشکل بر میخورید. دلیلش رو در ادامه بصورت کامل توضیح میدم.
زمانیکه قصد استفاده از یک دیتابیس رو داریم در حقیقت داریم اون دیتابیس رو Use می کنیم (این کار در حالت عادی بصورت اتومات انجام میشه و نیازی به نوشتن کدی توسط کاربر نیست).
در شکل زیر sp مربوط به Backup رو قبل از اتج خودکار مشاهده می کنید. به خط اول اون خوب دقت کنید . همونطور که مشاهده می فرمایید نام دیتابیسی که use (استفاده) شده بصورت ساده و بدون ذکر مسیر هست.

111631

همونطور که خودتون هم میدونید زماینکه یک دیتابیس رو بصورت اتچ خودکار در میاریم، بعد از اتچ شدن، نام دیتابیس به همراه مسیر کامل اون دیتابیس رو خواهیم داشت. نکته کلیدی همین جاست. در این حالت اولا : دیتابیسی که use میشه دیگه نام ساده دیتابیس نیست بلکه مسیر کامل به همراه نام دیتابیس با پسوند mdf خواهد بود. این کار بصورت اتوماتیک توسط sql انجام میشه و شما نیاز به انجام هیچ کاری ندارید.
ثانیا : هر جایی که در کوئری ها، قرار هست نام دیتابیس ذکر بشه دیگه نباید نام ساده دیتابیس رو ذکر کرد بلکه بایستی مسیر کامل + نام دیتابیس به همراه پسوند mdf رو درون یک قلاب ذکر کنید. عکس زیر رو با عکس قبلی مقایسه کنید. همونطور که در عکس هم ملاحظه می کنید در دستور backup مسیر کامل به همراه نام دیتابیس و پسوند فایل (mdf) درون قلاب قرار گرفته.

111630

در نهایت در تصویر زیر می تونید نتیجه کار را مشاهده کنید :

111629

حالا می تونیم براحتی درک کنیم چرا فقط در دستورات backup & restore این اتفاق می افته.(چون فقط درون این دو sp ما نام دیتابیس رو ذکر می کنیم که با توجه به توضیحاتی که عرض کردم نام دیتابیس بعد از اتچ خودکار تغییر میکنه).
برای حل این مشکل می تویند sp رو به گونه ای بنویسید که یک پارامتر دوم هم دریافت کنه که این پارامتر دوم همون مسیر کامل + نام دیتابیس به همراه پسوند خواهد بود.

esafb52
سه شنبه 16 مهر 1392, 13:54 عصر
با سلام مجدد و تشکر از پاسخ های کاملا فنی و مفیدتون
بله منم به این نکته رسیدم اصلا خود sql prompat این رو پیشنهاد میداد ولی باز یک سوال برام پیش اومد من به دلیل که شما شیوه sp رو پیشنهاد دادین و روش کارتون بر این مبنا بود دوست دارم تمام دستورات ام رو به ان صورت بنویسم ولی باز یک مشکل
دیتابیس رو باید رو یک سیستم دیگه اتچ کنید برای اولین بار چطور میتونم از sp اتچ استفاده کنم درحالیکه هنوز دیتابیسی در سرور ام اتچ نشده و نیست که بخواهم دستورات من رو اجرا کنه و اصلا یک جورایی من به sp خودم هنوز دسترسی ندارم باز باید به شیو سابق کامند تکس سمت سی شارپ رو بیارم؟؟؟

veniz2008
سه شنبه 16 مهر 1392, 21:18 عصر
بله منم به این نکته رسیدم اصلا خود sql prompat این رو پیشنهاد میداد ولی باز یک سوال برام پیش اومد من به دلیل که شما شیوه sp رو پیشنهاد دادین و روش کارتون بر این مبنا بود دوست دارم تمام دستورات ام رو به ان صورت بنویسم ولی باز یک مشکل
دیتابیس رو باید رو یک سیستم دیگه اتچ کنید برای اولین بار چطور میتونم از sp اتچ استفاده کنم درحالیکه هنوز دیتابیسی در سرور ام اتچ نشده و نیست که بخواهم دستورات من رو اجرا کنه و اصلا یک جورایی من به sp خودم هنوز دسترسی ندارم باز باید به شیو سابق کامند تکس سمت سی شارپ رو بیارم؟؟؟
نه. نیازی به استفاده از commandtext نیست.
برای اولین بار میتونید یکی از sp های سبک پروژه تون رو در فرم لود اولین فرم اجرا کنید تا دیتابیس از طریق یکی از sp های پروژه خودتون اتچ بشه.
مثلا من یک sp به نام SelectAllRecord دارم. برای اولین بار با کد زیر و با استفاده از Stored Procedure ها ، دیتابیس رو اتچ میکنم.


SqlConnection con = new SqlConnection("server = .\\SQLEXPRESS; AttachDbFilename = |DataDirectory|\\DBTest33.mdf; Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("SelectAllRecord", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
da.Fill(dt);

ab1000
جمعه 19 مهر 1392, 01:33 صبح
با سلام مجدد خدمت استاد عزیز و خسته نباشید ایا مبحث جستجو درون دیتاگرید توی ویدیوها پیاده شده؟ {اگه فرم جستجو و تکست باکسها و نتیجه رو با سلکت رکورد موردنظر توی دیتاگرید (جهت نمایش یا ویرایش) و همچنین پرش به رکورد خاص اموزش بدین ممنون میشویم!! ( بدلیل مشغله زیاد نتونستم تمام ویدئوها رو ببینم. شرمنده)

veniz2008
جمعه 19 مهر 1392, 14:55 عصر
با سلام مجدد خدمت استاد عزیز و خسته نباشید ایا مبحث جستجو درون دیتاگرید توی ویدیوها پیاده شده؟ {اگه فرم جستجو و تکست باکسها و نتیجه رو با سلکت رکورد موردنظر توی دیتاگرید (جهت نمایش یا ویرایش) و همچنین پرش به رکورد خاص اموزش بدین ممنون میشویم!! ( بدلیل مشغله زیاد نتونستم تمام ویدئوها رو ببینم. شرمنده)
سلام.
این موارد درون آموزش ها قرار نگرفته.
ویدئوها بصورت کامل تهیه شدن و امکان اضافه کردن مطلب جدید به اونها وجود نداره.
موفق باشید.

esafb52
سه شنبه 23 مهر 1392, 11:13 صبح
با سلام و تشکر مجدد از آموزش های خوبتون در قسمت چهارهم sp که برای جوین جداول نوشتین رو اگر دقت کرده باشین سوالات رو به صورت نامرتب جوین میکرد و بهتر بود ORDER BY TBLGROUP.GROUPID رو بهش اضافه میکردین البته این نکته در ویدیو ها قبل گفته شده بود ولی خب بهتر بود در اینجا هم استفاده میشد
USE [DBAZMOON]
GO
/****** Object: StoredProcedure [dbo].[loaddgroupandQtxt] Script Date: 10/15/2013 00:00:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[loaddgroupandQtxt]
AS
SELECT GROUPNAME,TBLQUSETION.GROUPID ,QUSETIONTEXT,ANSWER,CASE1,CASE2,CASE3,CASE4 FROM TBLQUSETION
INNER JOIN TBLGROUP ON dbo.TBLQUSETION.GROUPID = TBLGROUP.GROUPID
ORDER BY dbo.TBLGROUP.GROUPID
RETURN
تا نتایج مرتبی رو داشته باشیم
یک سوال :
من سعی کردم که بانک رو 2005 sql تبدیل کنم ولی نتونستم هم اسکریپت گرفتم و از اکسپورت استفاده کردم ولی نتیجه جالب نشد sp ها به مقصد انتقال پیدا نمیکرد و روابط و کلید ها هم لحاظ نمیشد؟!!!
موفق باشین

veniz2008
سه شنبه 23 مهر 1392, 13:09 عصر
با سلام و تشکر مجدد از آموزش های خوبتون در قسمت چهارهم sp که برای جوین جداول نوشتین رو اگر دقت کرده باشین سوالات رو به صورت نامرتب جوین میکرد و بهتر بود ORDER BY TBLGROUP.GROUPID رو بهش اضافه میکردین البته این نکته در ویدیو ها قبل گفته شده بود ولی خب بهتر بود در اینجا هم استفاده میشد
USE [DBAZMOON]
GO
/****** Object: StoredProcedure [dbo].[loaddgroupandQtxt] Script Date: 10/15/2013 00:00:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[loaddgroupandQtxt]
AS
SELECT GROUPNAME,TBLQUSETION.GROUPID ,QUSETIONTEXT,ANSWER,CASE1,CASE2,CASE3,CASE4 FROM TBLQUSETION
INNER JOIN TBLGROUP ON dbo.TBLQUSETION.GROUPID = TBLGROUP.GROUPID
ORDER BY dbo.TBLGROUP.GROUPID
RETURN
تا نتایج مرتبی رو داشته باشیم
سلام دوست من.
ابتدا جا داره یه تشکر از شما داشته باشم. قطعا اگه شما نبودید این تاپیک خاک میخورد.
وجود شما و سوالاتی که مطرح کردید و جواب هایی که داده شد باعث شد که این تاپیک قدری بتونه مفید باشه. شایدفردا ما نباشیم، باشد که در آینده کسانیکه این تاپیک رو می بینن مطلب مفیدی گیرشون بیاد.
حرفتون صحیح هست.
تاکید اصلی بر روی کلیت کار هست و معمولا کمتر به حواشی پرداختم وگرنه خیلی می شد مانور داد. همونطور که خودتون هم دیدید هر مطلبی رو که دست گذاشتم روش حداقل 30 تا 45 دقیقه وقت گرفت!.
بله با order by گرفتن از GroupID یا GroupName میشد کوئری ها رو مرتب کرد و نتیجه هم زیباتر خواهد شد.


یک سوال :
من سعی کردم که بانک رو 2005 sql تبدیل کنم ولی نتونستم هم اسکریپت گرفتم و از اکسپورت استفاده کردم ولی نتیجه جالب نشد sp ها به مقصد انتقال پیدا نمیکرد و روابط و کلید ها هم لحاظ نمیشد؟!!!
موفق باشین مراحل رو به همراه شکل ها توضیح میدم تا مشکلی پیش نیاد :
در محیط management studio روی دیتابیس مورد نظر کلیک راست کنید و از گزینه Task، گزینه Generate Scripts رو انتخاب کنید :

111890

اگر پنجره ای ظاهر شد کلید Next رو بزنید تا به پنجره زیر برسید. در این پنجره، کلیه گزینه ها رو تیک بزنید تا جداول و Stored Procedure های شما به اسکریپت اضافه بشن.

111889

در گام بعدی، ابتدا دکمه Advanced رو کلیک کنید.

111892

حال در پنجره باز شده، گزینه های کلیدی زیر رو لحاظ کنید :
الف) Script for Server Version : در اینجا بایستی ورژن SQL Server سیستم مقصد رو انتخاب کنید. من اسکریپت رو از SQL Server 2012 تهیه و نسخه مقصد من SQL Server 2008 R2 هست.
ب) Types of data to scrip : اگر مایلید داده های جداول شما هم به سیستم مقصد منتقل بشه این گزینه رو بر روی Schema and data تنطیم کنید.
توجه : گزینه های Script Foreign Keys و Script Primary Keys بصورت پیش فرض True هستن. اگر نبودن اونها رو بر روی True قرار بدید.

111891

بر روی Next کلیک و در انتها دکمه Finish رو کلیک کنید تا Script شما تهیه بشه.
111888

در سیتم مقصد یک دیتابیس خالی همنام با دیتابیسی که از اون script تهیه کردید رو ایجاد کنید.
در محیط Management Studio (یا با کدنویسی) از مسیر File \ Open \ File فایل اسکریپتی که ساختید رو بهش بدید و اونو اجرا کنید.
سعی کردم مراحل رو خیلی ساده توضیح بدم که دوستانی که آشنایی چندانی با مطالب ندارند هم بتونن استفاده کنن.
موفق باشید.

esafb52
سه شنبه 23 مهر 1392, 14:19 عصر
سلام دوست من.
ابتدا جا داره یه تشکر از شما داشته باشم. قطعا اگه شما نبودید این تاپیک خاک میخورد.
وجود شما و سوالاتی که مطرح کردید و جواب هایی که داده شد باعث شد که این تاپیک قدری بتونه مفید باشه. شایدفردا ما نباشیم، باشد که در آینده کسانیکه این تاپیک رو می بینن مطلب مفیدی گیرشون بیاد.
با سلام مجدد خدمت دوست و استاد عزیز آقای ونیز2008
شما اگر آمار بازدید از این تایپک رو ببینید قطعا با من موافق خواهید بود که این تایپیک موفق بوده(2388 تا این لحظه) !!شما اگر به سوالاتی که در انجمن مطرح میشود دقت کنین میبینین که این دوره آموزشی چقدر میتونست برای افراد مبتدی و حتی متوسط مفید باشه ولی مشکل اساسی جایی دیگه هست ما در این فرم بارها با درخواست هایی مواجه بودیم که طرف عنوان میکنه من وقت دیدن فیلم رو نداشتم لطفا این رو جواب بدین و ده دقیقه بعد باز یک سوال و یا استادمون گفته و اخیرا لطفا این رو برامو انجام بدین و یا برام میل کنین وect .........باور کنین بعضی از دوستان قدری حاضر نیستین خودشون رو به زحمت بندازن اونم برای چیزی که بهش نیاز دارن!!!برای من که سعادتی بود که با شما گام به گام در این پروژه پیش برم و از دانش شما استفاده کنم امیدوارم هرجا هستین موفق باشین

esmaeilbf
جمعه 26 مهر 1392, 12:59 عصر
موقع ثبت گروه ارور میده نمیتونه به sql وصل بشه
باید چیکار کنم؟

FastCode
جمعه 26 مهر 1392, 13:31 عصر
نمیدونم شنیدید یا نه؟"الحمد لله رو یکم زود گفتم"در نماز جمعه پس از فوت امام خمینی(Quote:"الحمد لله که امام مرد و نه این شد نه آن";یعنی نه روسها آمدند و نه غربی ها)
شما هم "فقظ" رو یک مقدار دیر گفتید.
نسخه enterprise فقط روی ویندوز سرور نصب میشه.
فقط نسخه enterprise روی ویندوزسرور نصب میشه.

veniz2008
جمعه 26 مهر 1392, 13:39 عصر
موقع ثبت گروه ارور میده نمیتونه به sql وصل بشه
باید چیکار کنم؟
سلام.
نام سرور رو اشتباه وارد کردید به همین خاطر برنامه قادر به ارتباط برقرار کردن با دیتابیس نیست.
برای اینکه نام سرور(ها) رو بیرون بکشید یه لیست باکس روی فرم بذارید و کد زیر رو در فرم لود قرار بدید :

List<string> listOfInstances = (Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Microsoft SQL Server").GetValue("InstalledInstances", "SQLSERVER IS NOT INSTALLED") as string[]).ToList();
listBox1.Items.AddRange(listOfInstances.ToArray()) ;
دقت کنید که پروژه رو در حالت AnyCpu اجرا کنید. برای این کار در پنجره Solution Explorer بر روی روت پروژه کلیک راست و گزینه properties رو بزنید. بقیش هم که در شکل مشخص هست.

esmaeilbf
جمعه 26 مهر 1392, 14:05 عصر
سلام.
نام سرور رو اشتباه وارد کردید به همین خاطر برنامه قادر به ارتباط برقرار کردن با دیتابیس نیست.
برای اینکه نام سرور(ها) رو بیرون بکشید یه لیست باکس روی فرم بذارید و کد زیر رو در فرم لود قرار بدید :

List<string> listOfInstances = (Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Microsoft SQL Server").GetValue("InstalledInstances", "SQLSERVER IS NOT INSTALLED") as string[]).ToList();
listBox1.Items.AddRange(listOfInstances.ToArray()) ;
دقت کنید که پروژه رو در حالت AnyCpu اجرا کنید. برای این کار در پنجره Solution Explorer بر روی روت پروژه کلیک راست و گزینه properties رو بزنید. بقیش هم که در شکل مشخص هست.

تمام این کارا رو کردم اما هیچی نشون نداد؟!!!
همونطور که توی فیلم قسمت 1 توضیح دادین نام سرور رو وارد کردم !

veniz2008
جمعه 26 مهر 1392, 14:38 عصر
این سرور رو خودتون تایپ می کنید؟ یا موقع بالا اومدن sql خودش وجود داره؟!!
به نظر میرسه جایی رو دارید اشتباه می کنید.
در کانکشن استرینگ از (local) و یا نقطه . استفاده کنید، ببینید مشکلتون حل میشه :

server = (local); ..........
یا

server = . ; ..........

esmaeilbf
جمعه 26 مهر 1392, 14:58 عصر
این سرور رو خودتون تایپ می کنید؟ یا موقع بالا اومدن sql خودش وجود داره؟!!
به نظر میرسه جایی رو دارید اشتباه می کنید.
در کانکشن استرینگ از (local) و یا نقطه . استفاده کنید، ببینید مشکلتون حل میشه :

server = (local); ..........
یا

server = . ; ..........

خودش وجود داره!
server = (local); ..........
این روش جواب داد خیلی ممنون
فقط یه توضیح کوچیکی بدین که دقیقا چه اتفاقی افتاد و فرقش با روش "." چیه؟

veniz2008
جمعه 26 مهر 1392, 16:21 عصر
خودش وجود داره!
server = (local); ..........
این روش جواب داد خیلی ممنون
فقط یه توضیح کوچیکی بدین که دقیقا چه اتفاقی افتاد و فرقش با روش "." چیه؟
زمانیکه شما در زمان نصب sql یک Instance دلخواه وارد می کنید و بعد با همون instance اقدام به ساخت دیتابیس می کنید بایستی از همون instance استفاده کنید. واسه همین در آموزش ها چنین کانکشن استرینگی رو می بینید :

SqlConnection con = new SqlConnection("server = .\\md2008;DataBase = DBAzmoon;Integrated Security = True");
منظور از دات (نقطه . ) یعنی همین کامپیوتر جاری. یعنی من به جای اینکه نام کامپیوتر خودم (veniz-pc) رو وارد کنم به جای اون از نقطه استفاده کردم. پس در سیستم خودم چه کانکشن بالا رو بنویسم چه کانکشن زیر رو بنویسم جفتشون یک معنا و مفهوم رو دارند و به درستی کار می کنند :

SqlConnection con = new SqlConnection("server = veniz-pc\\md2012 ;DataBase = DBTest1;Integrated Security = True");
در کانکشن های بالا بخش مربوط به server مربوط به کانکشن های شبکه هست که در واقع شامل دو بخش (ابتدا نام کامپیوتر یا IP سیستم جاری هست و بعد از بک اسلش هم باید نام اینستنس (InstanceName) رو وارد کنید).
در مورد چنین کانکشن استرینگ هایی در ویدئوی 16 (آخرین ویدئو) کامل صحبت میشه.
اما زمانیکه برای sql خودتون یک instance تعیین نمی کنید و می زارید بصورت پیش فرض باشه و SQL شما بر روی همین سیستم جاری وجود داره می تونید از (local) که اشاره به سیستم جاری داره استفاده کنید :

SqlConnection con = new SqlConnection("server = (local) ;DataBase = DBTest1;Integrated Security = True");
در کانکشن قبلی که مربوط به کانکشن های شبکه هست این احتمال وجود داره که server بر روی سیستم دیگه ای باشه به همین خاطر برای شناسایی اون از نام کامپیوتر (یا IP) و InstanceName استفاده میشه.

FastCode
جمعه 26 مهر 1392, 23:28 عصر
من قبلا نسخه enterprise ه 2000 رو روی xp داشتم.عجب چیز زشتی هم بود الان که فکرش رو میکنم.

در ضمن اون فایلهای کوچکی که قولش رو داده بودم هم احتمالا فردا شب آماده میشه.از چند ساعت قبل از اون موقعی که بهتون PM دادم تا جند دقیقه پیش توی راه بودم.واقعا دیگه چشمام نمیبینه.میترسم خراب کنم.

veniz2008
شنبه 27 مهر 1392, 01:46 صبح
من قبلا نسخه enterprise ه 2000 رو روی xp داشتم.عجب چیز زشتی هم بود الان که فکرش رو میکنم.
فکر میکنم حرفت درست باشه! ولی اینها رو ببین. به نظرت کی درست میگه؟ :
http://barnamenevis.org/showthread.php?373213-%DA%A9%D8%AF%D8%A7%D9%85-%D9%86%D8%B3%D8%AE%D9%87-sql2012-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D9%84%D8%A7%DB%8C%D9%86%D8%AA-%D9%85%D9%86%D8%A7%D8%B3%D8%A8-%D8%A7%D8%B3%D8%AA&highlight=Enterprise
حالا اینو ببین :
http://stackoverflow.com/questions/1006773/sql-server-2005-enterprise-on-windows-7/1006823#1006823

در ضمن اون فایلهای کوچکی که قولش رو داده بودم هم احتمالا فردا شب آماده میشه.از چند ساعت قبل از اون موقعی که بهتون PM دادم تا جند دقیقه پیش توی راه بودم.واقعا دیگه چشمام نمیبینه.میترسم خراب کنم.
ممنونم.
تشکر از زحمتی که میکشی.

behnam-soft
شنبه 27 مهر 1392, 18:48 عصر
سلام دوست من.
ابتدا جا داره یه تشکر از شما داشته باشم. قطعا اگه شما نبودید این تاپیک خاک میخورد.
وجود شما و سوالاتی که مطرح کردید و جواب هایی که داده شد باعث شد که این تاپیک قدری بتونه مفید باشه. شایدفردا ما نباشیم، باشد که در آینده کسانیکه این تاپیک رو می بینن مطلب مفیدی گیرشون بیاد..
با سلام خدمت آقای ونیز عزیز که انصافا با این ویدئوها، کمک بزرگی به خیلی از افرادی که تشنه یادگیری هستن- من جمله خودم- کردین.در مورد این حرفتون،من فکر می کنم که اتفاقا این یه نکته مثبته !!! چرا ؟ به این دلیل که شما اینقدر خوب و روان توضیح دادین که به نظر من افرادی که تازه شروع کردن، خیلی سوال خاصی براشون پیش نمیاد چون شما جواب ها رو هم در ویدئو ها دادین. من 2 3 قسمت رو بیشتر نتونستم ببینم ولی واقعا باید بهت خسته نباشید بگم، مطمئن باشین اون تاثیر و هدفی که مد نظر شما بوده، هر روز داره بیشتر تحقق پیدا می کنه... ضمنا این نکته رو هم بگم که چون شما ویدئوهارو برای قشر تازه کار در نظر گرفتین، خب خیلی جای تعجب نداره که اگر هم کسی به مشکلی بر بخوره، خیلی زود می تونه با یه جستجوی کوچیک، مشکلش رو برطرف کنه.
مخلص کلام اینکه،ارزش کاری که انجام دادین و وقتی که گذاشتین، چه برای ضبط ویدئو ها ، چه برای آپلود کردنشون، بسیار بالاست، و حیفه که بخواد با تعداد سوال های پرسیده شده و... سنجیده بشه.
به هر حال، امیدوارم در آینده بتونیم ویدئو های بیشتر و تخصصی تری از شما ببینیم، در اینصورت مطمئن باشین که یکی از افرادی که هر روز و هر ساعت سوال خواهد کرد، خود من هستم!!!
با تشکر، موفق باشید.

FastCode
شنبه 27 مهر 1392, 19:26 عصر
خیلی وقت هست که کانکشن استرینگ ننوشتم ولی زمان ما قبل و بعد از مساوی فاصله نمیزاشتن.شاید تغییر کرده یا من یادم نیست.فکر میکنم ارزش امتحان کردن داره.

veniz2008
یک شنبه 28 مهر 1392, 01:05 صبح
با سلام خدمت آقای ونیز عزیز که انصافا با این ویدئوها، کمک بزرگی به خیلی از افرادی که تشنه یادگیری هستن- من جمله خودم- کردین.در مورد این حرفتون،من فکر می کنم که اتفاقا این یه نکته مثبته !!! چرا ؟ به این دلیل که شما اینقدر خوب و روان توضیح دادین که به نظر من افرادی که تازه شروع کردن، خیلی سوال خاصی براشون پیش نمیاد چون شما جواب ها رو هم در ویدئو ها دادین. من 2 3 قسمت رو بیشتر نتونستم ببینم ولی واقعا باید بهت خسته نباشید بگم، مطمئن باشین اون تاثیر و هدفی که مد نظر شما بوده، هر روز داره بیشتر تحقق پیدا می کنه... ضمنا این نکته رو هم بگم که چون شما ویدئوهارو برای قشر تازه کار در نظر گرفتین، خب خیلی جای تعجب نداره که اگر هم کسی به مشکلی بر بخوره، خیلی زود می تونه با یه جستجوی کوچیک، مشکلش رو برطرف کنه.
مخلص کلام اینکه،ارزش کاری که انجام دادین و وقتی که گذاشتین، چه برای ضبط ویدئو ها ، چه برای آپلود کردنشون، بسیار بالاست، و حیفه که بخواد با تعداد سوال های پرسیده شده و... سنجیده بشه.
به هر حال، امیدوارم در آینده بتونیم ویدئو های بیشتر و تخصصی تری از شما ببینیم، در اینصورت مطمئن باشین که یکی از افرادی که هر روز و هر ساعت سوال خواهد کرد، خود من هستم!!!
با تشکر، موفق باشید.
سلام.
یکی از دلایل اصلی برای تولید این آموزش این بود که سوالات تکراری خیلی زیادی می دیدم و همچنان می بینم. خیلی از سوالاتی که روزانه در سطح تالار مطرح میشه در مجموعه وجود داره که اگر دوستان ویدئوها رو به دقت مشاهده کنن میتونه بخشی از سوالاتشون رو پاسخگو باشه ولی همچنان سوالات تکراری به وفور پیدا میشه.

خیلی وقت هست که کانکشن استرینگ ننوشتم ولی زمان ما قبل و بعد از مساوی فاصله نمیزاشتن.شاید تغییر کرده یا من یادم نیست.فکر میکنم ارزش امتحان کردن داره.
قبلا کانکشن رو به شکل های مختلف تست کرده بودم (از نظر فاصله قبل و بعد از مساوی، حروف کوچیک و بزرگ، استفاده از DataSource یا Server ، یا مثلا DataBase یا Initial Catalog و ...).
از لحاظ فاصله قبل و بعد مساوی خللی در کار ایجاد نمیکنه،یعنی جفت این کانکشن ها به درستی کار می کنند :

SqlConnection con = new SqlConnection("server=.\\md2012;DataBase=DBTest1;Integrated Security=True");
یا

SqlConnection con = new SqlConnection("server = .\\md2012;DataBase = DBTest1;Integrated Security = True");
اگر منظورتون چیز دیگه ای هست،لطفا ذکر کنید.
بین حروف کوچیک و بزرگ تفاوتی وجود نداره و اینکه شخصا ترجیح میدم که به جای استفاده از کلمات Data Source و Initial Catalog از کلمات Server و DataBase استفاده کنم چراکه مفهوم کانکشن رو بهتر میشه با این کلمات برای افراد مبتدی توضیح داد و فهم اون به نظرم راحت تر هست.

bitcob589
دوشنبه 29 مهر 1392, 10:43 صبح
با سلام و تشکر از فیلم آموزشی :تشویق::تشویق::تشویق::تشویق:: شویق::تشویق::تشویق:
در فیلم قسمت 4 در گرید ویو یک فیلد visble را true گذاشتیم و در زمانی که رکود انتخاب می شد سوال و جوابهای آن رکورد در تکس باکسها نمایش داده می شد.

در گرید ویوی که گذاشته ام visble دو تا فیلدها را true گذاشته ام چگونه می شود با کلیک بر روی هر خانه فیلد دیگر فیلدهای آن را در تکس باکس نمایش دهیم (در ویدئو رکورد انتخاب می کردیم تا اطلاعات آن فیلد به ما نمایش دهد )

veniz2008
دوشنبه 29 مهر 1392, 11:03 صبح
در فیلم قسمت 4 در گرید ویو یک فیلد visble را true گذاشتیم و در زمانی که رکود انتخاب می شد سوال و جوابهای آن رکورد در تکس باکسها نمایش داده می شد.

در گرید ویوی که گذاشته ام visble دو تا فیلدها را true گذاشته ام چگونه می شود با کلیک بر روی هر خانه فیلد دیگر فیلدهای آن را در تکس باکس نمایش دهیم (در ویدئو رکورد انتخاب می کردیم تا اطلاعات آن فیلد به ما نمایش دهد )
سلام دوست عزیز.
احتمالا منظورتون اینه که visible یکسری از ستون ها رو false کردیم تا نمایش داده نشن!.
برای اینکه روی یک سلول (خانه) از گرید کلیک کنید و اطلاعات رو نمایش بدید باید از رویدادهایی مثل CellMouseClick و ... استفاده کنید که مربوط به کلیک کاربر در یک سلول میشن.
در این باره قبلا در سایت خیلی بحث شده که می تونید کدها و رویدادهای مورد نیازتون رو پیدا کنید.
موفق باشید.

sajadsobh
پنج شنبه 02 آبان 1392, 01:56 صبح
چرا وقتی میخوایم از طریق sqlserver express ری استور کنیم خطا میده؟! :افسرده:
موقع بک آپ مشکل نداره موقع ری استور خطا میده!

User does not have permission to alter database 'MyGym', or the database does not exist.
ALTER DATABASE statement failed.
The file 'D:\MyFiles\MyGym\MyGym\MyGym\bin\Debug\Database\M yGym.mdf' cannot be overwritten. It is being used by database 'D:\MYFILES\MYGYM\MYGYM\MYGYM\BIN\DEBUG\DATABASE\M YGYM.MDF'.

FastCode
پنج شنبه 02 آبان 1392, 09:19 صبح
برای اینکه فایل مقصدی که برای restore انتخاب کردید وجود داره و توسط یک دیتابیس دیگه استفاده میشه.

vahidth
پنج شنبه 02 آبان 1392, 10:04 صبح
یه سوال از استاد ونیز دارم

چطوری میتونم برنامه ای که نوشتم مسیر کانکشن در یک فایل متنی باشه و کاربر بتونه خودش ای پی اون سیستم رو بده و برنامه متصل بشه به بانک

veniz2008
پنج شنبه 02 آبان 1392, 11:34 صبح
چرا وقتی میخوایم از طریق sqlserver express ری استور کنیم خطا میده؟! :افسرده:
موقع بک آپ مشکل نداره موقع ری استور خطا میده!

User does not have permission to alter database 'MyGym', or the database does not exist.
ALTER DATABASE statement failed.
The file 'D:\MyFiles\MyGym\MyGym\MyGym\bin\Debug\Database\M yGym.mdf' cannot be overwritten. It is being used by database 'D:\MYFILES\MYGYM\MYGYM\MYGYM\BIN\DEBUG\DATABASE\M YGYM.MDF'.
همونطور که دوستم هم گفتن نمیشه همزمان از یک دیتابیس در دو جای متفاوت استفاده کرد و همزمان که توسط برنامه دیگه ای داره استفاده میشه با دیگری بر روی اون دیتابیس تغییرات اعمال کرد. باید قبل از ری استور، تمامی کانکشن های متصل به اون دیتابیس قطع بشه (هیچ استفاده از اون نشه) و بعد از offline کردن اون اقدام به ری استور کنید.



چطوری میتونم برنامه ای که نوشتم مسیر کانکشن در یک فایل متنی باشه و کاربر بتونه خودش ای پی اون سیستم رو بده و برنامه متصل بشه به بانک
فکر کنم اگر منظور و هدفتون رو کامل توضیح بدید بهتر بتونم راهنمایی کنم.
ip سیستم سرور رو میتونی با قرار دادن یک فرم در پروژه و وارد کردن ip توسط کاربر دریافت کنید و بعد اونو در کانکشن استرینگ اعمال کنید و در صورت صحت اونو یک جایی ذخیره کنید و از اون به بعد از اون کانکشن ذخیره شده استفاده کنید.شما میتونی ip های فعال شبکه رو هم خودتون با کدنویسی بدست بیارید و بعد در یک حلقه، (در یک ساختار try و catch) اقدام به وارد کردن تک تک ip ها کنید تا متوجه بشید کدوم ip مربوط به سرور هست. اینطوری دیگه نیازی به گذاشتن فرم و دریافت ip هم از کاربر نیست. این تاپیک ها رو ببینید :
http://stackoverflow.com/questions/13492134/find-all-ip-address-in-a-network
http://stackoverflow.com/questions/9855230/how-to-get-the-network-interface-and-its-right-ipv4-address

vahidth
پنج شنبه 02 آبان 1392, 11:42 صبح
من میخوام برنامه رو به کاربر بدم و خودش نصب کنه بدون نیاز من

نظر شما در مورد این کار چیه از چه برنامه ای برای اینستال کردن استفاده کنم و چگونه برنامه ای که بصورت شبکه هست رو کاربر خودش نصب کنه؟

veniz2008
پنج شنبه 02 آبان 1392, 11:54 صبح
من میخوام برنامه رو به کاربر بدم و خودش نصب کنه بدون نیاز من

نظر شما در مورد این کار چیه از چه برنامه ای برای اینستال کردن استفاده کنم و چگونه برنامه ای که بصورت شبکه هست رو کاربر خودش نصب کنه؟
در شبکه بودن نرم افزار بحث یه کم متفاوت هست نسبت به تک کاربره بودن نرم افزار.
چون در شبکه بودن نسخه کامل sql رو نصب میکنن که معمولا حجم زیادی داره و نیاز به یکسری تنظیمات داره که باید حتما برنامه نویس در محل حاضر باشه (یا از راه دور اقدام به نصب کنه) ولی در یک برنامه تک کاربره برای شما sql express کفایت خواهد کرد(بدون نیاز به تنظیمات خاصی).
من گمان میکنم منظور شما نرم افزار تک کاربره هست نه نرم افزاری که قراره در چند سیستم بصورت همزمان کار کنه.
خیلی مهم نیست که با چه نرم افزاری اقدام به تهیه setup کنید. مهم اینه که پیش نیازهایی رو که نیاز هست روی سیستم مشتری نصب بشه وارد یک فایل setup کنید.می تونید با setup خود ویژوال یک فایل ست آپ بسازید. چیزی که مهمه کدنویسی شما برای اتچ خودکار دیتابیس هست.
درباره اتچ کردن خودکار برنامه تاپیک های خیلی زیادی ایجاد شده که توصیه میکنم با جستجو کردن به جواب مورد نظرتون برسید.
موفق باشید.

sajadsobh
پنج شنبه 02 آبان 1392, 11:58 صبح
همونطور که دوستم هم گفتن نمیشه همزمان از یک دیتابیس در دو جای متفاوت استفاده کرد و همزمان که توسط برنامه دیگه ای داره استفاده میشه با دیگری بر روی اون دیتابیس تغییرات اعمال کرد. باید قبل از ری استور، تمامی کانکشن های متصل به اون دیتابیس قطع بشه (هیچ استفاده از اون نشه) و بعد از offline کردن اون اقدام به ری استور کنید.

خب الان چاره چیه؟! چطوری کانکشن ها رو قطع کنم؟ بعدشم شما هم همین کار رو کردین ولی همچین مشکلی نداشتین که!!:متفکر:

FastCode
پنج شنبه 02 آبان 1392, 12:20 عصر
مسیر restore رو تغییر بدید.

sajadsobh
پنج شنبه 02 آبان 1392, 13:04 عصر
مسیر restore رو تغییر بدید.

متوجه منظورتون نمیشم.
من میام یه دیتابیس رو که یه جایی ذخیره شده backup میگیرم و بعد میام restore میکنمش.
بعدش که بخوام دوباره برنامه رو اجرا کنم حب همون دیتابیس اول که استفاده میشد استفاده میشه دیگه. من که connectionstring رو تغییر نمیدم. واقعاً گیج شدم من :ناراحت:

FastCode
پنج شنبه 02 آبان 1392, 14:53 عصر
https://www.google.com/search?q=database+restore+path+ssms&tbm=isch (https://www.google.de/search?q=database+restore+path+ssms&tbm=isch)

sajadsobh
پنج شنبه 02 آبان 1392, 15:37 عصر
ممنون.
فهمیدم مشکل از کجاست. باید توی connection string اسم دیتابیس رو میذاشتم :چشمک:

esmaeilbf
جمعه 03 آبان 1392, 12:05 عصر
یه مشکلی در رابطه با قسمت ثبت سوالات پیش اومده!!!!!
من کامله کامل با توجه به فیلم ها قسمت ثبت سوالات رو طراحی کردم اما موقع ثبت یک سوال درون یک گروه امتحانی ، سوال به QuestionID بعدی وارد میشه

private void cmbGroup_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter("SelectAllQuestionByGroupID", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@groupID", ((DataRowView)cmbGroup.SelectedItem)["GroupID"]);
DataTable dt = new DataTable();
da.Fill(dt);
grdQuestion.DataSource = dt;


}

مثلا من گروه اقتصاد با شماره QuestionID = 2 رو انتخاب میکنم و سوال رو ثبت میکنم اما وقتی داخل sql میرم میبینم که سوال برای گروه با QuestionID = 3 ثبت شده!!!
-------------------------------------------------------
یه پیشنهادم دارم اینکه سورس پروژه رو واسه دانلود قرار بدین
خیلی خیلی متشکریم:)

HOSSEINONLINE7
جمعه 03 آبان 1392, 17:37 عصر
سلام با تشکر از آموزشتون که خیلی خوب هست .

شما از کانکشن استرینگ و sql در آموزشتون استفاده کردید و سوال اینه که من فقط روش orm و Linq را بلدم و دانشجو هستم و با این روش پروژه هام را انجام میدم و آیا برای آینده که میخوام وارد بازار کار بشم نیاز به یادگیری کار با کانکشن استرینگ و sql هست ؟ میتونم فقط با همین روش کار کنم ؟

FastCode
جمعه 03 آبان 1392, 17:51 عصر
سلام با تشکر از آموزشتون که خیلی خوب هست .

شما از کانکشن استرینگ و sql در آموزشتون استفاده کردید و سوال اینه که من فقط روش orm و Linq را بلدم و دانشجو هستم و با این روش پروژه هام را انجام میدم و آیا برای آینده که میخوام وارد بازار کار بشم نیاز به یادگیری کار با کانکشن استرینگ و sql هست ؟ میتونم فقط با همین روش کار کنم ؟
همه ی مطالبی که در مورد همه ی connection string ها وجود داره روی هم ۵۰ صفحه نمیشه.(http://www.connectionstrings.com/)
و یکی از اجزا اصلی هر برنامه دیتابیسی هست.مثل اینکه شما بگید من بدون ظرف غذا میخورم.شاید شما اینطوری بگید و هر کسی نگاه کنه همین رو بگه.ولی بلاخره غذاتون رو دارید از یک جایی میخورید که اسمش میشه ظرف.
در روشهایی هم که گفتید بلاخره ارتباط با دیتابیس وجود داره و راهی برای این کار نیست جز connection string

(بعضی دیتابیسها طراحی متفاوتی دارند و نیاز به connection string ندارند و طبق معمول چون چیز متفاوتی هستند در ایران استفاده نمیشن.)

veniz2008
جمعه 03 آبان 1392, 20:20 عصر
یه مشکلی در رابطه با قسمت ثبت سوالات پیش اومده!!!!!
من کامله کامل با توجه به فیلم ها قسمت ثبت سوالات رو طراحی کردم اما موقع ثبت یک سوال درون یک گروه امتحانی ، سوال به QuestionID بعدی وارد میشه

private void cmbGroup_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter("SelectAllQuestionByGroupID", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@groupID", ((DataRowView)cmbGroup.SelectedItem)["GroupID"]);
DataTable dt = new DataTable();
da.Fill(dt);
grdQuestion.DataSource = dt;


}

مثلا من گروه اقتصاد با شماره QuestionID = 2 رو انتخاب میکنم و سوال رو ثبت میکنم اما وقتی داخل sql میرم میبینم که سوال برای گروه با QuestionID = 3 ثبت شده!!!
-------------------------------------------------------
یه پیشنهادم دارم اینکه سورس پروژه رو واسه دانلود قرار بدین
خیلی خیلی متشکریم:)
sp که گذاشتید مربوط به نمایش سوالات یک گروه امتحانی هست ولی سوالتون در ارتباط با ثبت یک سوال هست.
در زمان ثبت برای هر سوال ما GroupID رو ثبت می کنیم تا مشخص بشه سوال درج شده متعلق به کدوم گروه هست.
در مورد QuestionID که گفتید، این فیلد اصلا مشخص کننده گروه خاصی نیست.
من فکر میکنم بهتره یکبار دیگه ویدئوهای مورد نیازتون رو از اول و با دقت بیشتری نگاه کنید.

سلام با تشکر از آموزشتون که خیلی خوب هست .

شما از کانکشن استرینگ و sql در آموزشتون استفاده کردید و سوال اینه که من فقط روش orm و Linq را بلدم و دانشجو هستم و با این روش پروژه هام را انجام میدم و آیا برای آینده که میخوام وارد بازار کار بشم نیاز به یادگیری کار با کانکشن استرینگ و sql هست ؟ میتونم فقط با همین روش کار کنم ؟
سلام دوست عزیز.
در تکمیل صبحت های جناب FastCode این مطلب رو بگم که در LINQ و EF هم کانکشن استرینگ وجود داره ولی کاربر نیازی به درگیر شدن با این مفاهیم رو نداره و در واقع در پس زمینه این موارد ست میشه.
شما اگر مفاهیم ADO رو خوب درک کنید در LINQ و Entity Framework هم با مشکل مفاهیم روبرو نخواهید شد چراکه LINQ و EF هم در پس زمینه همون کارهای ADO رو دارند ولی کاربر دیگه درگیر این مفاهیم نمیشه.
بدون شک باید به سمت LINQ و EF حرکت کرد و بازارکار هم روز به روز طلب بیشتری رو برای این تکنولوژی ها میکنه.
در مورد sql هم همونطور که خودتون مستحضر هستید زبان LINQ شما رو بی نیاز به دونستن دستورات خاص sql میکنه ولی همین دستورات در نهایت باز هم به زبان قابل فهم اون دیتابیس (sql، mysql ، oracle یا ...) تبدیل میشه (بدون دخالت کاربر) ولی به شخصه اعتقاد دارم که هیچ چیزی نمیتونه جای یادگیری SQL Server رو بگیره.
موفق باشید.

esmaeilbf
جمعه 03 آبان 1392, 20:58 عصر
مشکل اینه وقتی فرم ثبت سوال لود میشه اگر سوال رو برای ایتم اول کمبوباکس ثبت کنم درسته اما وقتی یک گروه دیگه انتخاب میکنم برای بعدیش ثبت میشه!!!!
واقعا چند بار فیلم رو دیدم کپی برابر اصله اما نمیدونم مشکل از کجاست!!!!
اینم کد دکمه ی ثبت سوال
SqlCommand cmd = new SqlCommand("AddQuestion", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@GroupID", cmbGroup.SelectedValue);
cmd.Parameters.AddWithValue("@QuestionText",txtboxQuestion.Text);
cmd.Parameters.AddWithValue("@txtCase1",textboxCase1.Text);
cmd.Parameters.AddWithValue("@txtCase2",textboxCase2.Text);
cmd.Parameters.AddWithValue("@txtCase3",textboxCase3.Text);
cmd.Parameters.AddWithValue("@txtCase4",textboxCase4.Text);
cmd.Parameters.AddWithValue("@answer",cmbAnswer.Text);

con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("سوال مورد نظر با موفقیت اضافه گردید");
clearTextBox();
FillGrid();
اما اگر سورس برنامه رو هم لطف کنید شاید بهتر باشه ، از زحماتتون بسیار سپاس گذارم
-----------------------------------------------------------------------------------------------------------------------------
یه سوال هم در مورد متغیرهای از نوع setting برای چی از این نوع استفاده کردین؟!
چه مزیتی نسبت به متغیر های معمولی داره؟

esafb52
جمعه 03 آبان 1392, 22:48 عصر
با اجازه جناب ونیز 2008
کدهای کامل این فرم رو بذارید درخواست سورس هم نفرمایید دوست عزیز قبلا راجب به این مسئله پاسخ داده شده

ahmad002
یک شنبه 05 آبان 1392, 01:30 صبح
سلام خدمت استاد عزیز آقای ونیز
من خدایش سورس نمیخوام، تا الان هم سعی کردم خودم روی تمام سورس ها کار کنم، فقط الان به یه مشکل جدی خوردم، این محاسبه کننده جواب های صحیح و غلط و بی پاسخ واسه من اشتباه، جواب درست آزمون رو بهم نمیده، واقعاً مغزم داغ کرده اونقدر این کدهای این صفحه رو مرور کردم، دیگه ناامید شدم و گفتم از شما و باقی دوستان کمک بگیرم!
کدهای این صفحه رو میزارم اگه ممکنه یه نگاه بندازید، خیلی ممنون میشم اگه کمک کنید،(کدهای فرم آزمون)


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace MyAzmoon
{
public partial class FrmAzmon : Form
{
SqlConnection con = new SqlConnection("server=(local);DataBase=DBAzmoon;Integrated security = true");
DataTable dt;
int MyTime;
int k = 0;
ListBox MyListAnswer;
//int num = 0;
public static int bipasokh, sahih, ghalat;
public FrmAzmon()
{
InitializeComponent();
}
public void UncheckRadioButton(Control parent)
{
foreach ( Control ctrl in Parent.Controls)
{
if (object.ReferenceEquals(ctrl.GetType(), typeof(RadioButton)))
{
((RadioButton)ctrl).Checked = false;
}
}
}
private void FrmAzmon_Load(object sender, EventArgs e)
{
txtQuestionNumber.Focus();
SqlDataAdapter da = new SqlDataAdapter("SelectAllGroup", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
da.Fill(dt);
CmbGroup.DataSource = dt;
CmbGroup.DisplayMember = "GroupName";
CmbGroup.ValueMember = "GroupID";
UncheckRadioButton(groupBox2);
//BtnNext.Enabled = false;
//btnPreviews.Enabled = false;
groupBox2.Enabled = false;
}

private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}

private void btnShow_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtQuestionNumber.Text) )
errorProvider1.SetError(txtQuestionNumber, "تعداد سوالات را تعیین کنید");
else if (string.IsNullOrWhiteSpace(CmbGroup.Text))
errorProvider1.SetError(CmbGroup, "گروه امتحانی را تعیین کنید");
else if (txtQuestionNumber.Text == (0).ToString())
errorProvider1.SetError(txtQuestionNumber, "تعداد سوالات نمیشود صفر باشد");
else
{
errorProvider1.SetError(txtQuestionNumber, "");
errorProvider1.SetError(CmbGroup, "");
SqlCommand cmd = new SqlCommand("CheckQuestionNumber", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@groupid", CmbGroup.SelectedValue);
cmd.Parameters.AddWithValue("@questionnumber", txtQuestionNumber.Text.Trim());
cmd.Parameters.Add("@result", SqlDbType.Int);
cmd.Parameters["@result"].Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
int res = Convert.ToInt32(cmd.Parameters["@result"].Value);
if (res == 0)
{
MessageBox.Show("تعداد سوالات درخواستی در بانک اطلاعاتی موجود نیست","ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
txtQuestionNumber.ResetText();

}
else if (res == 1)
{
btnPreviews.Enabled = true;
BtnNext.Enabled = true;
//btnShow.Enabled = false;
//btnCancel.Enabled = false;
groupBox1.Enabled = false;
groupBox2.Enabled = true;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
dt = new DataTable();
da.Fill(dt);
if (CHKTime.Checked)
{
timer1.Start();
lblTotalTime.Text = (Properties.Settings.Default.QuestionTime * dt.Rows.Count).ToString();
}
k = 0;
txtQuestion.Text = dt.Rows[0]["QuestionText"].ToString();
RdbCase1.Text = dt.Rows[0]["Case1"].ToString();
RdbCase2.Text = dt.Rows[0]["Case2"].ToString();
rdbCase3.Text = dt.Rows[0]["Case3"].ToString();
RdbCase4.Text = dt.Rows[0]["Case4"].ToString();
//
MyListAnswer = new ListBox();
for (int i = 0; i < dt.Rows.Count; i++)
{
MyListAnswer.Items.Add(0);
}
}//End else
}
}

private void timer1_Tick(object sender, EventArgs e)
{
MyTime = 0;
MyTime = Convert.ToInt32(lblTotalTime.Text);
MyTime--;
lblTotalTime.Text = MyTime.ToString();
if (MyTime == 0)
{
timer1.Stop();
btnPreviews.Enabled = false;
BtnNext.Enabled = false;
//MessageBox.Show("زمان شما به اتمام رسید.");
for (int i = 0; i < dt.Rows.Count; i++)
{
if (Convert.ToInt32(MyListAnswer.Items[i]) == Convert.ToInt32(dt.Rows[i]["Answer"]))
{
sahih++;
}
else if (Convert.ToInt32(MyListAnswer.Items[i]) == 0)
{
bipasokh++;
}
else if (Convert.ToInt32(MyListAnswer.Items[i]) != Convert.ToInt32(dt.Rows[i]["Answer"]))
{
ghalat++;
}
}
frmResultQuestion fresult = new frmResultQuestion();
fresult.ShowDialog();
}
}

private void BtnNext_Click(object sender, EventArgs e)
{
sahih = 0;
ghalat = 0;
bipasokh = 0;
RdbCase1.Checked = false;
RdbCase2.Checked = false;
rdbCase3.Checked = false;
RdbCase4.Checked = false;
if (!RdbCase1.Checked && !RdbCase2.Checked && !rdbCase3.Checked && !RdbCase4.Checked)
{
MyListAnswer.Items[k] = 0;
}
else if (RdbCase1.Checked)
{
MyListAnswer.Items[k] = 1;
}
else if (RdbCase2.Checked)
{
MyListAnswer.Items[k] = 2;
}
else if (rdbCase3.Checked)
{
MyListAnswer.Items[k] = 3;
}
else if (RdbCase4.Checked)
{
MyListAnswer.Items[k] = 4;
}
//
if (k == dt.Rows.Count - 1)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (Convert.ToInt32(MyListAnswer.Items[i]) == Convert.ToInt32(dt.Rows[i]["Answer"]))
{
sahih++;
}
else if (Convert.ToInt32(MyListAnswer.Items[i]) == 0)
{
bipasokh++;
}
else if (Convert.ToInt32(MyListAnswer.Items[i]) != Convert.ToInt32(dt.Rows[i]["Answer"]))
{
ghalat++;
}
}
timer1.Stop();
BtnNext.Enabled = true;
btnPreviews.Enabled = false;
MessageBox.Show("صحیح برابر است با : " + sahih + "");
MessageBox.Show("غلط برابر است با : " + ghalat + "");
MessageBox.Show("نزده برابر است با : " + bipasokh + "");
frmResultQuestion fresult = new frmResultQuestion();
fresult.ShowDialog();
}
else
{
k++;
txtQuestion.Text = dt.Rows[k]["QuestionText"].ToString();
RdbCase1.Text = dt.Rows[k]["Case1"].ToString();
RdbCase2.Text = dt.Rows[k]["Case2"].ToString();
rdbCase3.Text = dt.Rows[k]["Case3"].ToString();
RdbCase4.Text = dt.Rows[k]["Case4"].ToString();
//UncheckRadioButton(groupBox2);
}
}

private void btnPreviews_Click(object sender, EventArgs e)
{
if (k > 0)
{
k--;
txtQuestion.Text = dt.Rows[k]["QuestionText"].ToString();
RdbCase1.Text = dt.Rows[k]["Case1"].ToString();
RdbCase2.Text = dt.Rows[k]["Case2"].ToString();
rdbCase3.Text = dt.Rows[k]["Case3"].ToString();
RdbCase4.Text = dt.Rows[k]["Case4"].ToString();
}
}

private void button1_Click(object sender, EventArgs e)
{
groupBox1.Enabled = true;
groupBox2.Enabled = false;
timer1.Stop();
}
}
}


بنظر شما مشکل کجاست که نتیجه آزمون درست نیست!؟ منظورم اینه که تعداد پاسخ های صحیح و غلط و پاسخ داده شده درست نیست، مثلاً کاربر هیچی نزده ولی میگه 1یکی صحیح و مثلاً 3 تا نزده!
خیلی خیلی ممنونم از شما...

veniz2008
یک شنبه 05 آبان 1392, 10:20 صبح
سلام آقای ونیز
من خدایش سورس نمیخوام، تا الان هم سعی کردم خودم روی تمام سورس ها کار کنم، فقط الان به یه مشکل جدی خوردم، این محاسبه کننده جواب های صحیح و غلط و بی پاسخ واسه من اشتباه، جواب درست آزمون رو بهم نمیده، واقعاً مغزم داغ کرده اونقدر این کدهای این صفحه رو مرور کردم، دیگه ناامید شدم و گفتم از شما و باقی دوستان کمک بگیرم!
کدهای این صفحه رو میزارم اگه ممکنه یه نگاه بندازید، خیلی ممنون میشم اگه کمک کنید،(کدهای فرم آزمون)


private void BtnNext_Click(object sender, EventArgs e)
{
sahih = 0;
ghalat = 0;
bipasokh = 0;
RdbCase1.Checked = false;
RdbCase2.Checked = false;
rdbCase3.Checked = false;
RdbCase4.Checked = false;
if (!RdbCase1.Checked && !RdbCase2.Checked && !rdbCase3.Checked && !RdbCase4.Checked)
{
MyListAnswer.Items[k] = 0;
}
.
.
.
}

بنظر شما مشکل کجاست که نتیجه آزمون درست نیست!؟ منظورم اینه که تعداد پاسخ های صحیح و غلط و پاسخ داده شده درست نیست، مثلاً کاربر هیچی نزده ولی میگه 1یکی صحیح و مثلاً 3 تا نزده!
خیلی خیلی ممنونم از شما...
سلام دوست عزیز.
مشکل از جایی شروع میشه که ما یه کدی رو بدون اینکه منطقی براش داشته باشیم اضافه می کنیم.
هیچ اشکالی نداره که شما بخواید کدهای درون ویدئوها رو دستخوش تغییرات کنید (نه تنها ایرادی نداره که بسیار کار خوبی هم هست) فقط باید برای هر قطعه کدی که اضافه می کنیم دلیل داشته باشیم و خوب بررسی کنیم آیا این یه خطی که من اضافه میکنم جایی تاثیر گذار هست یا که خیر.
در دکمه Next شما تغییراتی رو لحاظ کردید که تاثیر گذار هست. وقتی کاربر روی دکمه بعدی کلیک میکنه شما میاید مقادیر متغیرهای صحیح، بی پاسخ و غلط رو 0 می کنید. خوب این کار یعنی چی؟ ما که نباید مقادیر این متغیرها رو از بین ببریم.
یه بار دیگه ویدئوی 10 و بخش کدنویسی دکمه next رو با کدهای خودتون مقایسه کنید.
موفق باشید.

ahmad002
یک شنبه 05 آبان 1392, 20:20 عصر
سلام دوست عزیز.
مشکل از جایی شروع میشه که ما یه کدی رو بدون اینکه منطقی براش داشته باشیم اضافه می کنیم.
هیچ اشکالی نداره که شما بخواید کدهای درون ویدئوها رو دستخوش تغییرات کنید (نه تنها ایرادی نداره که بسیار کار خوبی هم هست) فقط باید برای هر قطعه کدی که اضافه می کنیم دلیل داشته باشیم و خوب بررسی کنیم آیا این یه خطی که من اضافه میکنم جایی تاثیر گذار هست یا که خیر.
در دکمه Next شما تغییراتی رو لحاظ کردید که تاثیر گذار هست. وقتی کاربر روی دکمه بعدی کلیک میکنه شما میاید مقادیر متغیرهای صحیح، بی پاسخ و غلط رو 0 می کنید. خوب این کار یعنی چی؟ ما که نباید مقادیر این متغیرها رو از بین ببریم.
یه بار دیگه ویدئوی 10 و بخش کدنویسی دکمه next رو با کدهای خودتون مقایسه کنید.
موفق باشید.
:متعجب:
از صبر و حوصلتون بسیار ممنونم...
کدهایی که باعث میشد مقدار متغییر های صحیح، بی پاسخ و غلط صفر بشه رو برداشتم، ولی متاسفانه :ناراحت: هنوز هم جواب صحیح رو بهم نمیده!

veniz2008
یک شنبه 05 آبان 1392, 23:57 عصر
از صبر و حوصلتون بسیار ممنونم...

:گریه:

کدهایی که باعث میشد مقدار متغییر های صحیح، بی پاسخ و غلط صفر بشه رو برداشتم، ولی متاسفانه :ناراحت: هنوز هم جواب صحیح رو بهم نمیده!این کدهای فرم آزمون. بررسی کنید ببینید کجا رو اشتباه نوشتید :

112330

112331

112329

esafb52
دوشنبه 06 آبان 1392, 20:29 عصر
با سلام به جناب ونیز 2008 و تشکر از زحماتشون
من پیشنهاد میدم اگه قراره کدی رو هم بذارین عکس از اون قطعه کد بذارین تادوستان حداقل یکبار کد رو تایپ کنند قطعا بعدها از این کار نتیجه بهتری خواهند گرفت
موفق باشی

esmaeilbf
پنج شنبه 09 آبان 1392, 11:28 صبح
با زدن دکمه بعدی nullException میده!!!
چند بارم فیلم رو دیدم نمیدونم مشکل از کجاست این سورس صفحه آزمون:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace MyAzmoon
{
public partial class frmExam : Form
{
int num = 0;
public int myTime = 0;
DataTable dt;
int k = 0;
int sahih, bipasokh, ghalat;
ListBox myList = new ListBox();

SqlConnection con = new SqlConnection("server = (local);DataBase = DBAzmoon;Integrated Security = True");
public frmExam()
{
InitializeComponent();
}
//this method uncheck all of radio button in a parent ex:groupBox1
public void UncheckedRadioButton(Control parent)
{
foreach (Control ctrl in Parent.Controls)
{
if(object.ReferenceEquals(ctrl.GetType() , typeof(RadioButton)))
{
((RadioButton )ctrl).Checked = false;
}
}
}
private void label1_Click(object sender, EventArgs e)
{

}

private void frmExam_Load(object sender, EventArgs e)
{

SqlDataAdapter da = new SqlDataAdapter("SelectAllGroup", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
da.Fill(dt);
cmbGroup.DataSource = dt;
cmbGroup.DisplayMember = "GroupName";
cmbGroup.ValueMember = "GroupID";
//
UncheckedRadioButton(groupBox2);

}

private void btnShow_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(textBoxQuestionNumber.T ext))
{
errorProvider1.SetError(textBoxQuestionNumber, "تعداد سوالات را وارد نمایید");
}
else if (string.IsNullOrWhiteSpace(cmbGroup.Text))
{
errorProvider1.SetError(cmbGroup, "گروه امتحانی بایستی وارد شود");
}
else
{
errorProvider1.SetError(textBoxQuestionNumber, "");
SqlCommand cmd = new SqlCommand("CheckQuestionNumber", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@groupid", cmbGroup.SelectedValue);
cmd.Parameters.AddWithValue("@questionnumber", textBoxQuestionNumber.Text);
cmd.Parameters.Add("@result", SqlDbType.Int);
cmd.Parameters["@result"].Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
int res = Convert.ToInt32(cmd.Parameters["@result"].Value);
if (res == 0)
{
MessageBox.Show("تعداد سوالات موجود در بانک اطلاعاتی از تعداد سوالات مد نظر کمتر است");
}
else if(res==1)
{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
dt = new DataTable();
da.Fill(dt);
//
ListBox myListResult = new ListBox();
while (myListResult.Items.Count < Convert.ToInt32(textBoxQuestionNumber.Text.Trim()) )
{
//یک عدد رندوم بر اساس تعداد سوالاتی که از دیتابیس واکشی شده تولید میکند
Random rand = new Random();
num = rand.Next(Convert.ToInt32(dt.Rows[0][0].ToString()),Convert.ToInt32(dt.Rows[dt.Rows.Count-1][0].ToString()));

//به تعداد سوالات موجود در دیتا تیبل چک میکنیم
for (int i = 0; i < dt.Rows.Count; i++)
{
// که آیا عدد رندوم تولیدی درون دیتا تیبل موجود هست و معتبر می باشد
if (num == Convert.ToInt32(dt.Rows[i][0].ToString()))
{
//اگر لیست باکس خالی بود که عدد رو اضافه کن
if (myListResult.Items.Count == 0)
myListResult.Items.Add(num);
//اگر نبود
else
{
//به تعداد اعضای لیست باکس چک میکنیم
for (int j = 0; j < myListResult.Items.Count; j++)
{
//عدد تکراری نباشد اگر بود حلقه را به پایان ببرد
if (num == Convert.ToInt32(myListResult.Items[j]))
j = myListResult.Items.Count;
else
{
//اگر حلقه با آخر رسید عدد تصادفی را داخل لیست باکس قرار بده
if (j == myListResult.Items.Count - 1)
{
myListResult.Items.Add(num);

}
}

}
}

}

}

}//end while
string s = "";
for (int i = 0; i < myListResult.Items.Count; i++)
{
s += myListResult.Items[i] + ",";
}

s = s.Remove(s.Length - 1, 1);
//

da = new SqlDataAdapter("SelectFilterQuestion", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@listQuestionNumber",s);
dt = new DataTable();
da.Fill(dt);
//
if (chkLimitTime.Checked == true)
{
timer1.Start();
lblTimer.Text = (dt.Rows.Count * Properties.Settings.Default.QuestionTime).ToString ();
}
if (chkLimitTime.Checked == false)
{
timer1.Stop();
lblTimer.ResetText();
}
k = 0;
lblQuestion.Text = dt.Rows[0]["QuestionText"].ToString();
RdbCase1.Text = dt.Rows[0]["Case1"].ToString();
RdbCase2.Text = dt.Rows[0]["Case2"].ToString();
RdbCase3.Text = dt.Rows[0]["Case3"].ToString();
RdbCase4.Text = dt.Rows[0]["Case4"].ToString();
for (int i = 0; i < dt.Rows.Count; i++)
{
myList.Items.Add(0);
}

}

}
}

private void timer1_Tick(object sender, EventArgs e)
{

myTime = Convert.ToInt32(lblTimer.Text);
myTime--;
lblTimer.Text = myTime.ToString();
if (myTime == 0)
{
timer1.Stop();
}
}

private void btnNext_Click(object sender, EventArgs e)
{
if(!RdbCase1.Checked && !RdbCase2.Checked && ! RdbCase3.Checked && !RdbCase4.Checked)
{
myList.Items[k] = 0;
}
else if (RdbCase1.Checked)
{
myList.Items[k] = 1;
}
else if (RdbCase2.Checked)
{
myList.Items[k] = 2;
}
else if (RdbCase3.Checked)
{
myList.Items[k] = 3;
}
else if(RdbCase4.Checked)
{
myList.Items[k] = 4;
}
if (k == dt.Rows.Count-1)
{
for(int i = 0; i<dt.Rows.Count; i++)
{
if (Convert.ToInt32(myList.Items[i].ToString()) == Convert.ToInt32(dt.Rows[i]["Answer"].ToString()))
{
sahih++;
}
else if (Convert.ToInt32(myList.Items[i].ToString()) != Convert.ToInt32(dt.Rows[i]["Answer"].ToString()))
{
ghalat++;
}
else
{
bipasokh++;
}
}
}
else
{
k++;
lblQuestion.Text = dt.Rows[k]["QuestionText"].ToString();
RdbCase1.Text = dt.Rows[k]["Case1"].ToString();
RdbCase2.Text = dt.Rows[k]["Case2"].ToString();
RdbCase3.Text = dt.Rows[k]["Case3"].ToString();
RdbCase4.Text = dt.Rows[k]["Case4"].ToString();
UncheckedRadioButton(groupBox2);
}
}
}
}


به حلقه ی foreach خطا میگیره همونجایی که متدی برای غیرفعال کردن چکباکس ها نوشتید::متفکر:
Object reference not set to an instance of an object.!!!!!

FastCode
پنج شنبه 09 آبان 1392, 11:34 صبح
برای اینکه parent رو با P نوشتید.باید با p مینوشتید.

ahmad002
جمعه 10 آبان 1392, 09:02 صبح
:گریه:
این کدهای فرم آزمون. بررسی کنید ببینید کجا رو اشتباه نوشتید :

112330

112331

112329

هیچ کجا اشتباه نبود، دوباره فیلم رو میبینم شاید درست شد!

bitcob589
دوشنبه 13 آبان 1392, 10:17 صبح
با سلام
چگونه می توانیم به ترتیب سوالهای غلط و صحیح و بی پاسخ را در فرم دیگر نمایش دهیم

veniz2008
دوشنبه 13 آبان 1392, 10:39 صبح
با سلام
چگونه می توانیم به ترتیب سوالهای غلط و صحیح و بی پاسخ را در فرم دیگر نمایش دهیم
سلام.
توی آموزش هم ما همین کار رو انجام دادیم.
با استفاده از سه متغیر static و البته public ، در فرم مقصد به مقدار این سه متغیر دسترسی پیدا کردیم.
شاید هم منظورتون، نمایش خود سوالات هست!. اینکه کدوم سوال رو اشتباه زده و کدوم رو درست.
اگر جواب شما، چیزی خارج از محدوده آموزش هست، لطفا بصورت کامل سوالتون رو مطرح کنید تا پاسخگو باشم ولی چیزی که من از سوالتون متوجه شدم دقیقا داخل آموزش وجود داره.

bitcob589
دوشنبه 13 آبان 1392, 10:53 صبح
سلام.
توی آموزش هم ما همین کار رو انجام دادیم.
با استفاده از سه متغیر static و البته public ، در فرم مقصد به مقدار این سه متغیر دسترسی پیدا کردیم.
شاید هم منظورتون، نمایش خود سوالات هست!. اینکه کدوم سوال رو اشتباه زده و کدوم رو درست.
اگر جواب شما، چیزی خارج از محدوده آموزش هست، لطفا بصورت کامل سوالتون رو مطرح کنید تا پاسخگو باشم ولی چیزی که من از سوالتون متوجه شدم دقیقا داخل آموزش وجود داره.
---------------------------------------------------------------------------------------
توجه :
دوستان عزیز در بعضی از پست ها که دوستان یا تشکر میکنن یا پستی رو میذارن که جواب فنی نداره، از پاسخ دادن اجتناب میکنم.
متاسفانه در بعضی از مدیران تالار، روندی وجود داره که رفتار غرض ورزانه و سلیقه ای رو در پیش گرفتن و به بهانه های الکی و مضحک (که خودشون بارها همون کارها رو میکنن) اقدام به جریمه و حذف پست میکنن.
فعلا این روندی هست که وجود داره و تا زمانیکه این آقایون این رفتارها و بچه بازی ها رو کنار نزارن در حداقل بحث ها، شرکت میکنم.
هر چند کسی که دنبال بهونه میگرده هر کاری کنی باز هم کار خودش رو میکنه.
بنابراین، اگر جایی پاسخ نمیدم یا در بحث ورود نمیکنم، دلیل بر بی احترامی یا بی تفاوتی نیست.
از لطفی که همه دوستان در این چند وقت داشتن(چه در این تاپیک چه بصورت پیغام خصوصی)، تشکر میکنم.

منظورم خود سوالات است با جواب صحیح و غلط

veniz2008
دوشنبه 13 آبان 1392, 11:08 صبح
منظورم خود سوالات است با جواب صحیح و غلط
برای این کار دیتاتیبل سوالات رو بصورت public static تعریف کنید.
بعد از اینکه کاربر جواب همه سوالات رو داد یک ستون به دیتاتیبل اضافه کنید. مثلا ستون result :

dt.Columns.Add("result");
حالا، با یک حلقه for که به تعداد سطرهای دیتاتیبل (تعداد سوالات) هست بین جواب صحیح سوال (فیلد Answer) و جوابی که کاربر داده (همون MyListAnswer) یک مقایسه انجام بدید. اگر با هم برابر بودن مثلا عبارت "صحیح" رو به ستون result اضافه کنید.

dt.Columns.Add("result");
for (int i = 0; i < dt.Rows.Count; i++)
{
if (Convert.ToInt32(mylistanswer.Items[i]) == Convert.ToInt32(dt.Rows[i]["Answer"].ToString()))
{
sahih++;
dt.Rows[i]["result"] = "صحیح";
}
else if (Convert.ToInt32(mylistanswer.Items[i]) == 0)
{
bipasokh++;
dt.Rows[i]["result"] = "بی پاسخ";
}
else if (Convert.ToInt32(mylistanswer.Items[i]) != Convert.ToInt32(dt.Rows[i]["Answer"].ToString()))
{
ghalat++;
dt.Rows[i]["result"] = "اشتباه";
}
}
حالا در فرم مقصد، همونطوری که به متغیرها دسترسی داریم می تونید به دیتاتیبل هم دسترسی داشته باشید.

علی متقی پور
سه شنبه 14 آبان 1392, 00:31 صبح
با سلام

جسارتا میتونم بپرسم چرا برنامه با EF و Linq نوشته نشده؟

یعنی شما دیگران رو تشویق مکینید که از Ado.net و Sp ها استفاده کنند؟

در صورت عدم تمایل میتونید پاسخ ندید

با تشکر

FastCode
سه شنبه 14 آبان 1392, 07:34 صبح
با سلام

جسارتا میتونم بپرسم چرا برنامه با EF و Linq نوشته نشده؟

یعنی شما دیگران رو تشویق مکینید که از Ado.net و Sp ها استفاده کنند؟

در صورت عدم تمایل میتونید پاسخ ندید

با تشکر
علتش رو یک بار توضیح دادن.به خاطر abstraction زیاد این تکنولوژی ها نمیشه مبانی رو آموزش داد.

veniz2008
چهارشنبه 15 آبان 1392, 10:58 صبح
سلام دوستان.
با عذر خواهی از مدیریت تالار بخاطر این پست فاقد محتوا.
این چند وقت شرایط به گونه ای رقم خورده که به این نتیجه رسیدم که مدتی در خدمت دوستان نباشم و در تالار فعالیت نداشته باشم.
امیدوارم در غیاب من،دوست عزیزم جناب FastCode و جناب esafb52 به پرسش های دوستان پاسخ بدن بلکه گره ای از مشکل یه شخص باز بشه.
شاد و موفق و سربلند باشید.

hosseines
پنج شنبه 16 آبان 1392, 19:18 عصر
با سلام خدمت دوستان
من از اس کیول 2000 استفاده کردم ولی به یک مشکل برخوردم لطفا راهنمایی کنید.
create proc CheckQuestionNumber1
@groupid int,
@questionnumber int,
@result int output
as
declare @totalQuestion int
select @totalQuestion=count(*) from TblQuestion
where GroupId=@groupid

if(@questionnumber>@totalQuestion)
set @result=0
else
begin
set @result=1
select Top '@questionnumber' * FROM TblQuestion
where GroupId=@groupid
order by newid()
end

ارور:

Server: Msg 170, Level 15, State 1, Procedure CheckQuestionNumber1, Line 15
Line 15: Incorrect syntax near '@questionnumber'.

http://barnamenevis.org/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGJCAIAAAD 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

esafb52
پنج شنبه 16 آبان 1392, 22:13 عصر
با سلام خدمت دوستان
من از اس کیول 2000 استفاده کردم ولی به یک مشکل برخوردم لطفا راهنمایی کنید.
create proc CheckQuestionNumber1
@groupid int,
@questionnumber int,
@result int output
as
declare @totalQuestion int
select @totalQuestion=count(*) from TblQuestion
where GroupId=@groupid

if(@questionnumber>@totalQuestion)
set @result=0
else
begin
set @result=1
select Top '@questionnumber' * FROM TblQuestion
where GroupId=@groupid
order by newid()
end

ارور:

Server: Msg 170, Level 15, State 1, Procedure CheckQuestionNumber1, Line 15
Line 15: Incorrect syntax near '@questionnumber'.

http://barnamenevis.org/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAGJCAIAAAD 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

با سلام و ابتدا کسب اجازه از استادو دوست عزیز ونیز2008 و سلام به شما دوست عزیز دستور تاپ رو فکر کنم اشتباه نوشتی و باید پرانتز میگذاشتین به هرحال من این کوئری رو برات میذارم
USE [DBAZMOON]
GO
/****** Object: StoredProcedure [dbo].[CHECKquestonCount] Script Date: 11/07/2013 11:23:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[CHECKquestonCount]
@groupid INT ,
@questioncount INT ,
@result INT OUTPUT
AS
DECLARE @totoalquestion INT
SELECT @totoalquestion = COUNT (*) FROM TBLQUSETION WHERE GROUPID=@groupid
IF (@questioncount > @totoalquestion)
BEGIN
SET
@result=0
END
ELSE
BEGIN
set @result=1
SELECT TOP(@questioncount) * FROM TBLQUSETION WHERE GROUPID=@groupid
ORDER BY NEWID()
END
RETURN

FastCode
پنج شنبه 16 آبان 1392, 22:32 عصر
مشکل پرانتز نگذاشتن نیست
مشکل گذاشتن دو تا single quote (') هست

hosseines
جمعه 17 آبان 1392, 00:25 صبح
سلام
با دستور TOP(@questioncount) باز ارور زیر رو میده.
Incorrect syntax near '('.

hosseines
جمعه 17 آبان 1392, 00:31 صبح
سلام
شرمنده باز ارور میده
Incorrect syntax near '('.

FastCode
جمعه 17 آبان 1392, 00:57 صبح
سلام.
پرانتز ها رو بردارید و جاشون فاصله بزارید

asrah6
جمعه 17 آبان 1392, 13:19 عصر
سلام
من قسمت بکاپ گیری را طبق فیلم آموزشی پیش رفتم و در ویندوز 7 با VS 2010 و sqlserver 2008 کار می کنم در ضمن ویندوز را در درایو D نصب کرده ام بعد از اجرای فرم بکاپ یک پوشه روی دسکتاپ به نام test backup ساختم و نامی که برای فایل بکاپ انتخاب کردم back1 گذاشتم و سپس بر روی باتن پشتیبان گیری کلیک کردم تا عملیات پشتیبان گیری شروع شود ولی ارور زیر را داد در ضمن در درایو های دیگر مشکلی با پشتیبان گیری نداشتم

hosseines
جمعه 17 آبان 1392, 16:48 عصر
سلام
با فاصله هم درست نشد همشونو امتحان کردم نمی دونم دیگه چجوری درست میشه..

FastCode
جمعه 17 آبان 1392, 17:23 عصر
علتش اینه که کاربر SQL به پوشه شخصی کاربر دسترسی نداره.
یا engine رو یا کاربر سیستم اجرا کنید یا دسترسی پوشتون رو باز کنید.
برای اولی باید از SQL Server configuration manager یا Service Manager استفاده کنید.
برای دومی باید در مشخصات پوشه در قسمت دسترسی سطح دسترسی کاربر SQL یا System users یا Authenticated users یا everyone رو باز کنید.
پ.ن.:شاید یکی دو تا از اسم ها رو اشتباه نوشته باشم.خیلی وقته که از این کارها نکردم.

esafb52
جمعه 17 آبان 1392, 20:14 عصر
سلام
با فاصله هم درست نشد همشونو امتحان کردم نمی دونم دیگه چجوری درست میشه..
با سلام مطمن باشین که جایی رو دارین درست تایپ نمکیین پیشنهاد من اینه که برنامه اس کیول اسیستنت رو نصب کن بهت در کد نویسی کمک میکنه یا ای کیو ال پرمپت

hosseines
یک شنبه 19 آبان 1392, 20:46 عصر
دوست عزیز این برنامه رو از کجا دانلود کنم

esafb52
یک شنبه 19 آبان 1392, 22:07 عصر
بفرما دوست عزیز
http://www.softgozar.com/WebPage/Download.aspx?SoftwareId=2164&Title=Red-Gate-SQL-Toolbelt-2013.1.8.2.372

veniz2008
دوشنبه 20 آبان 1392, 12:01 عصر
سلام.
در ویدئوی اول بن دقایق 40 تا 42 یک مطلب رو به اشتباه اعلام کرده بودم که ضمن پوزش از دوستان مطلب صحیح رو اعلام میکنم.
در اونجا گفته شده بود که در محیط ویژوال استودیو، در خط آخر stored procedure به جای کلمه go بایستی از کلمه return استفاده کرد که در واقع این مورد صحیح نیست و سبک stored procedure نوشتن در هر دو محیط یکسان هست.
توضیح اضافه اینکه :
return اساسا برای اطلاع از اجرای موفقیت آمیز یا عدم اجرای موفقیت آمیز SP استفاده میشه که یک مقدار با خودش بر میگردونه. مقدار 0 به معنای موفقیت و 1- به معنای عدم موفقیت هست البته این اعداد قراردادی هست.
نکته بعدی اینکه به محض اینکه return در SP اجرا میشه کار اون هم تمام خواهد شد.(یعنی اگر قطعه کدی بعد از Return وجود داشته باشه دیگه اجرا نخواهد شد).
به عبارتی return رو هر جایی از پروسیجر می تونیم بگذاریم.
پس چه در Express و چه در غیر اون این دستور فرقی نداره و نحوه نوشتن sp یکسان هست.
موفق باشید.

bitcob589
سه شنبه 21 آبان 1392, 08:51 صبح
در ویدئو یک عدد menuStrip در صفحه اصلی گذاشته شد و منو فقط در همان صفحه قابل مشاهده بود آیا این امکان وجود دارد که منو در تمام صفحات قابل مشاهده باشد

kasraaa
سه شنبه 21 آبان 1392, 19:47 عصر
در مورد حرف دوست خوبمون esafb52 نباید و بحث هایی که شده سورس کد را در اختیار مبتدی ها گذاشت اما مبتدی ها اگه میخوان پیشرفت کنن خودشان دانلود نکنن این بنظر من بهتره چون هیچ کسی تا میتونه به ضرر خودش کار نمیکنه

mehdiomnia
سه شنبه 21 آبان 1392, 22:10 عصر
واقعا نمیدونم چطوری تشکر کنم از این ویدئوهاتون واقعا نمیدونم ها یعنی اصلا زبان نمیتونه بیان کنه
من 16 ویدئو رو دو شبه دیدم و برای بار دوم هست دارم میبینم واقعا نکات عالی توشون هست
یک سوال : برای شبکه کردن از همین راهی که فرمودید این از طریق شبکه داخلی بود برای نت هم همین وضعه درسته فرقش اینه بجای اون آی پی مثلا آی پی ولید که خریداری شده ست میشه روش درسته ؟
سوالم اینجاست شاید البته به مفاهیم شبکه برگرده ولی آی پی که ولید هست و میخریم و روی سرور ست میکنیم در شبکه داخلی هم سرور از طریق همون آی پی در دسترس خواهد بود ؟ یا برای اینکه یک نرم افزار در شبکه داخلی و خارجی کار کنه باید از دو رنج آی پی استفاده کرد ؟ چون اونطور که من میدونم آی پی ولید که میخری خوده سرویس دهنده وب رو سیستمش برات کانفیگ میکنه پس عملا سرور ما اون آی پی رو نداره پس اگر نرم افزاری رو روی اون ست کنی و اینترنت قطع بشه ولی نرم افزار از طریق شبکه داخلی به سرور دسترسی داشته باشه اون موقع چی ؟

FastCode
چهارشنبه 22 آبان 1392, 01:13 صبح
جست وجو کنید:Port forwarding
Edit:ببخشید اشتبها یک چیز دیگه نوشته بودم که دیر متوجه شدم که ویرایش نشده.

reza93509350
چهارشنبه 22 آبان 1392, 11:25 صبح
سلام
ضمن تشکر و قدر دانی ازveniz2008 بخاطر آموزشهای مفید و کاربردی ویدویی که در این بخش قرار دادید
کاربر مبتدی هستم، در بخش اول آموزش قسمت اتصال به دیتابیس زمانی که در ویژوال برنامه را اجرا نمودم و فیلد را پر کردم هنگامی که دکمه ثبت را می زنم ،در بخش کدنویسی خط con.Open را به حالت زرد رنگ در می اورد
کد نوشته شده:

{
errorProvider1.SetError(textname, "نام را حتماوارد کنید");
}
else
{
//errorProviderجهت خالی نمودن
errorProvider1.SetError(textname, "");
//اتصال به دیتابیس
SqlConnection con = new SqlConnection("server = .\\REZA; DataBase = DBestelam;integrated security = true");
//ارتباط با نام استرو پروسجر دیتابیس
SqlCommand cmd = new SqlCommand("sabt", con);
cmd.CommandType = CommandType.StoredProcedure;
//قرار دادن تکست نام ویژوال برروی فیلد نام دیتابیس
cmd.Parameters.AddWithValue("@name", textname.Text);
con.Open();
//اجرا شدن دستور دیتابیس
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("با موفقیت ثبت و دخیره شد");
}

esafb52
چهارشنبه 22 آبان 1392, 11:41 صبح
دوست عزیز اشکال از رشته اتصال به سرورت هست اون رو باید درست وارد کنی

reza93509350
چهارشنبه 22 آبان 1392, 11:56 صبح
دوست گرامی ممنون از جوابتون اگه میشه یکم بیشتر توضیح بدین

esafb52
چهارشنبه 22 آبان 1392, 14:55 عصر
دوست عزیز خطای شما میگه آدرس سرور رو اشتباه نوشتین باید اون رو اصلاح کنیین شما از چه نسخه sql استفاده میکنین

kasraaa
چهارشنبه 22 آبان 1392, 16:28 عصر
دوست عزیز خطای شما میگه آدرس سرور رو اشتباه نوشتین باید اون رو اصلاح کنیین شما از چه نسخه sql استفاده میکنین

در مورد حرف دوست خوبمون esafb52 نباید و بحث هایی که شده سورس کد را در اختیار مبتدی ها گذاشت اما مبتدی ها اگه میخوان پیشرفت کنن خودشان دانلود نکنن این بنظر من بهتره چون هیچ کسی تا میتونه به ضرر خودش کار نمیکنه

reza93509350
پنج شنبه 23 آبان 1392, 09:48 صبح
sql2088-R2
همان اسمی که موقع کانکت اسکول می زنیم وارد کردم ولی قبول نمی کنه
آدرس دقیق سرور رو چطور می تونم ببینم

esafb52
پنج شنبه 23 آبان 1392, 10:41 صبح
با سلام ما اگر دیتابیس خود رو بروی سرور ساخته اید مطابق با آموزش ها پس این مکراحل رو انجام بدین
1-از سربرگ دیتا add new data source
2-همون گزینه دیتابیس رو نکس بزنید
3-باز یک نکس(دیتاست انتخاب شده)
4-بعد گزینه new connection
5- بعد هم microsoft sql server
6-بعد در تکس باکس دومی کلیک کن تا اسم سرور نمایش داده بشه
7-و از قسمت پایین اسم دیتابیست رو انتخاب کن بعدش اوکی و در قسمت پایین میبینی که رشته اتصال ساخته شده فقط کافیه کپی و پیست بشه
موفق باشی

hosseines
شنبه 25 آبان 1392, 09:39 صبح
سلام
موقع ریستور کردن با ارور زیر برخورد می کنم علتش چی می تونه باشه.
User must be in the master database.
ALTER DATABASE statement failed.
Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
User must be in the master database.
ALTER DATABASE statement failed.

FastCode
شنبه 25 آبان 1392, 10:45 صبح
قبل از restore با دستور USE [MASTER] دیتابیستون رو عوض کنید.

hosseines
شنبه 25 آبان 1392, 11:04 صبح
دوست عزیز
کجا و چجوری باید عوض کنم؟

FastCode
شنبه 25 آبان 1392, 11:09 صبح
قبل از اجرای دستور restore باید این دستور رو اجرا کنید.

hosseines
شنبه 25 آبان 1392, 12:24 عصر
دوست عزیز ببخشد دستور رو اضافه کردم ولی نشد ببین درست نوشتم؟

create proc MyRestor
@pathFile nvarchar(400)
as
Alter DataBase DBAzmoon set Offline with rollback IMMEDIATE
use [DBAzmoon]
restore DataBase DBAzmoon From disk = @pathFile with replace
alter DataBase DBAzmoon set online

GO
ارور

Server: Msg 154, Level 15, State 1, Procedure MyRestor1, Line 5
a USE database statement is not allowed in a procedure or trigger.

FastCode
شنبه 25 آبان 1392, 13:01 عصر
گفتم قبل از دستور نه وسطش

hosseines
شنبه 25 آبان 1392, 13:29 عصر
شرمنده دوست عزیز من هر جا که دستور رو میزارم ارور میده لطف می کنید دقیق بگید کجاش بنویسم.

create proc MyRestor1
@pathFile nvarchar(400)
as
use [DBAzmoon]
Alter DataBase DBAzmoon set Offline with rollback IMMEDIATE
restore DataBase DBAzmoon From disk = @pathFile with replace
alter DataBase DBAzmoon set online
GO

FastCode
شنبه 25 آبان 1392, 14:00 عصر
اوله اوله اول.
این پراسیجر باید توی دیتابیس مستر ایجاد بشه.
چرا نوشتید USE DBAzmoon?باید بنویسید USE MASTER

hosseines
یک شنبه 26 آبان 1392, 09:21 صبح
خب یعنی پراسیجر تو دیتابیس مستر ایجاد کنم یه مشکل پیش میاد که موقع ریستور کردن باید نام دیتابیس کانکشن رو به مستر تغییر بدم؟
بعد یه سوال داشتم یا بهترین روش برای برنامه نویسی بانک اطلاعاتی همین روش می باشد یعنی از طریق پراسیجرها عملیات انجام بگیره یا نه کدهای دیتابیس رو در سی شارپ بنویسیم و در بانک اطلاعاتی فقط دیتاتیبل ایجاد کنیم؟

FastCode
یک شنبه 26 آبان 1392, 10:05 صبح
خب یعنی پراسیجر تو دیتابیس مستر ایجاد کنم یه مشکل پیش میاد که موقع ریستور کردن باید نام دیتابیس کانکشن رو به مستر تغییر بدم؟
بعد یه سوال داشتم یا بهترین روش برای برنامه نویسی بانک اطلاعاتی همین روش می باشد یعنی از طریق پراسیجرها عملیات انجام بگیره یا نه کدهای دیتابیس رو در سی شارپ بنویسیم و در بانک اطلاعاتی فقط دیتاتیبل ایجاد کنیم؟
سوال اول که جوابش مثبته.
در مورد سوال دوم باید بگم یک مقدار سلیقه ایه.البته در مقیاس بالا این انتخاب تفاوت بسیار زیادی در سرعت ایجاد میکنه که با مطالعه در مورد اینکه SQL چطوری SP ها رو کامپایل میکنه و چه تصمیمگیریهایی موقع compile کردن SP و query معمولی توسط MSSQL گرفته میشه میتونید برای هر query این انتخاب رو درست انجام بدید.من خودم به دلایل دیگه مثل interoperability با دیتابیس های دیگه و cross-platform و cross-database بودن برنامه هام همیشه محاسبات رو در برنامه انجام میدم و کلا از sql استفاده نمیکنم.شما هم بهتره فعلا با توجه به نیازتون و راحتی کد نویسی این انتخاب رو انجام بدین.بعدا که تعداد سطرهای پروژه هاتون مقیاس میلیونی و میلیاردی گرفت زمان و داده آزمایشی کافی برای تصمیمگیری خواهید داشت.

hosseines
یک شنبه 26 آبان 1392, 10:11 صبح
ممنون از راهنمایی تون دوست عزیز

Iran58
سه شنبه 28 آبان 1392, 18:06 عصر
باسلام
فرض كنيد برنامه را تحت شبه كرده ايم
و دوكاربر كه يك سطح دسترسي دارند مي خواهند در جدول نام گروهي را وارد كنند همزمان
حال چه كدي بنويسم بين اين دو ثبت همزمان جند ثانيه اختلاف بذارم تا مشكلي در ثبت همزمان پيش نياييدو يااگر تكراري بود پيام تكراري بودن را نشان بدهد

matrix-program
سه شنبه 28 آبان 1392, 18:16 عصر
باسلام
فرض كنيد برنامه را تحت شبه كرده ايم
و دوكاربر كه يك سطح دسترسي دارند مي خواهند در جدول نام گروهي را وارد كنند همزمان
حال چه كدي بنويسم بين اين دو ثبت همزمان جند ثانيه اختلاف بذارم تا مشكلي در ثبت همزمان پيش نياييدو يااگر تكراري بود پيام تكراري بودن را نشان بدهد
پیشنهاد من این است که برای هر تیبل یک متغیر بولین تعریف کنید برای غیر قابل تغییر بودن که هر وقت کاربر تغییر ایجاد کرد به مدت پنج ثانیه ترو بشود
در ضمن سوالتون رو بد جا پرسیدید
لطفا تاپیک آقای ونیز 2008 رو شلوغ نکنید اینجا محل مطرح سوالات و نظرات برای آموزش ایشونه

FastCode
سه شنبه 28 آبان 1392, 20:51 عصر
پیشنهاد من این است که برای هر تیبل یک متغیر بولین تعریف کنید برای غیر قابل تغییر بودن که هر وقت کاربر تغییر ایجاد کرد به مدت پنج ثانیه ترو بشود
در ضمن سوالتون رو بد جا پرسیدید
لطفا تاپیک آقای ونیز 2008 رو شلوغ نکنید اینجا محل مطرح سوالات و نظرات برای آموزش ایشونه
این روش هیچ خاصیتی نداره.
برای این کار چند راه دارید.
۱. serializable transaction
۲.stored procedure
۳.uuid primary key
و چند تای دیگه.
هر کدوم رو که دوست دارید بگید توضیح بدم.(در یک تاپیک دیگه)

FastCode
جمعه 01 آذر 1392, 23:35 عصر
باید معذرت خواهی کنم چون متاسفانه ۹ تا از فایل های درون سرور من به علت خرابی هارد دیسک سرور آسیب دیده بودند که تعمیر شده و به حالت اول بازگردانده شدند.
برای تعمیر فایلهای خود از این راهنما استفاده کنید:
http://arvind-tech.blogspot.de/2012/01/how-to-repair-damaged-incomplete-files.html
۱.ابتدا تورنت مربوطه رو دانلود میکنید.
۲.سپس تورنت را شروع میکنید.
۳.تورنت را متوقف میکنید.
۴.فایلهای خراب را به جای فایلهای نیمه دانلود شده میگزارید(overwrite)
۵.ترونت را verify میکنید.
۶.تورنت را استارت میکنید.

باز هم معذرت میخوام.با اینکه ایراد سختافزاری بود باید زودتر متوجه میشدم.تقریبا به مدت ۳۰ ساعت فایلهای روی سرور خراب بودند.
فایلهای خراب:
فایل های تبدیل شده به شماره های:
1v1
۱
۲
۱۰
۱۶
و
فایلهای تبدیل نشده اصلی به شماره های:
۴
۵
۶
۷
واقعا معذرت میخوام.

dashkeyvan
شنبه 02 آذر 1392, 06:02 صبح
سلام دوست عزیزم.
ممنونم از اینکه اولین نظر رو شما دادید.
این ویدئوها بصورت کامل آماده شدن ولی در ارتباط با پیشنهادتون :
هدف اصلی این آموزش ها مخاطبان مبتدی هست و تلاش میشه که این مخاطبان تا حد متوسطی از لحاظ کدنویسی بالا کشیده بشن.
باور بفرمایید اگر برای یک مبتدی که هنوز با مفاهیم آشنا نیست من برم سراغ چند لایه نوشتن، چیزی رو یاد نخواهد گرفت. چند لایه آموزش دادن برای کسانی مفید خواهد بود که با مباحث اولیه آشنایی دارند.

سلام دوست من.
ممنونم که نظر دادید.
نظر من متفاوت با نظر شما هست.
عقیده و باور من این هست که هر کس با توجه به امکاناتی که در اختیار داره باید به دیگران کمک کنه.
اگر این ویدئوها بتونه حتی به یک نفر چیزی رو یاد بده، اون لحظه، لحظه ای هست که من به هدفم رسیدم.
این ویدئوها فقط یک نقطه شروع خواهد بود برای کسانیکه واقعا قصد یادگیری دارند ولی امکاناتش رو ندارند. بقیش به تلاش و پشتکار خودشون مربوط میشه.
همین چند روز پیش توی بخش "گفتگو با مسولین سایت" یه نفر تاپیک گذاشته بود و میگفت که دوس داره یاد بگیره ولی پول نداره. از این جور آدم ها زیاد هست دوست من.
اگر قراره نون شب من با این 16 ویدئو قطع یا کم بشه، همون بهتر که بشه. این آموزش ها حتی 1 درصد از زبان سی شارپ هم نیستن.
یاد دادن و یاد گرفتن دو فرآیند هم روند و موازی هستن. من همزمان که دارم به دیگران یاد میدم در کنارش دارم از دیگران یاد می گیرم.
من همیشه گفتم : در کنار پشتکار خودم، برنامه نویس به من کمک کرده تا بزرگ بشم. اخلاق حکم میکنه که امروز من به دیگران کمک کنم. انصاف نیست که الان یه خورده یاد گرفتم نسبت به دیگران بی تفاوت باشم.
به هر حال، هرکس به یک شکل کمک میکنه ولی ثابت شده که آموزش های مالتی مدیا تاثیرگذاری خیلی بیشتری دارند.
بازم از اینکه نظرتون رو دادید تشکر میکنم.


ایولا خوشم اومد منم خودم همین تفکر رو دارم و مطمئن هستم فردی با این تفکر به هر مقامی برسه حقشه دمت گرم فیلم هارو هم استفاده کردیم و لذت بردیم نکات مفیدی توش بود

حميدسي شارپ
شنبه 16 آذر 1392, 08:37 صبح
باید معذرت خواهی کنم چون متاسفانه ۹ تا از فایل های درون سرور من به علت خرابی هارد دیسک سرور آسیب دیده بودند که تعمیر شده و به حالت اول بازگردانده شدند.
برای تعمیر فایلهای خود از این راهنما استفاده کنید:
http://arvind-tech.blogspot.de/2012/01/how-to-repair-damaged-incomplete-files.html
۱.ابتدا تورنت مربوطه رو دانلود میکنید.
۲.سپس تورنت را شروع میکنید.
۳.تورنت را متوقف میکنید.
۴.فایلهای خراب را به جای فایلهای نیمه دانلود شده میگزارید(overwrite)
۵.ترونت را verify میکنید.
۶.تورنت را استارت میکنید.

باز هم معذرت میخوام.با اینکه ایراد سختافزاری بود باید زودتر متوجه میشدم.تقریبا به مدت ۳۰ ساعت فایلهای روی سرور خراب بودند.
فایلهای خراب:
فایل های تبدیل شده به شماره های:
1v1
۱
۲
۱۰
۱۶
و
فایلهای تبدیل نشده اصلی به شماره های:
۴
۵
۶
۷
واقعا معذرت میخوام.
------------------------------------
سلام.آقا دشمنت شرمنده.ولي من مبتدي هستم و دانلود كردم همه رو.ولي حالا كه باز ميكنم ميبينم يه جاهايي از صفحه خرابه.لطفا راهنمايي كنين منو...حالا كه دانلودشون كردم بايد چيكار كنم؟آخه لينك راهنمايي رو كه دادين خرابه و باز نميشه.لطفا كاملتر توضيح بدين چطور فايلارو ترميم كنيم؟منظورتون از اينكه تورنت رو شروع كنيم چيه؟اصلا با چي شروع كنيمشون؟
ممنون

SEPIDEYESHAB
دوشنبه 25 آذر 1392, 14:32 عصر
با سلام و تشکر فراوان بخاطر این آموزش بسیار روان و پر محتوا !

من از قابلیت asynchronous Delegate برای بکاپ گیری برنامه ام استفاده کرده ام اما در CPU های تک هسته ای برنامه اجرا نمیشود :افسرده:

لطفا راهنمایی کنید چگونه از این قابلیت در این سیستم ها استفاده کنم !!!

peiman.oruji
سه شنبه 26 آذر 1392, 20:28 عصر
سلام آقا من تا گرفتن پشتیبان رو مثل برنامه آموزشی نوشتم، ولی وقتی دکمه پشتیبان گیری رو میزنم این ارور رو میده:
http://upload7.ir/images/89645944737623497489.jpg

Cannot open backup device C:\program file\microsoft SQlserver\MSSQL.1\MSSQL\Backup\mybackup.bak

مرگ من جواب بدین پروژه پایان ترم میخوام بدمش

peiman.oruji
سه شنبه 26 آذر 1392, 20:36 عصر
سلام وقتی تعداد سوالات رو برابر تعداد سوالات موجود در دیتا بیس در نظر میگیرم برنامه کلا هنگ میکنه. دقیقا تو این حلقه هنگ میکنه:
http://upload7.ir/viewer.php?file=58538943786836036070.jpg

FastCode
سه شنبه 26 آذر 1392, 21:17 عصر
اگر فایلها خراب باشند کلا باز نمیشن.
با مدیا پلیر دیگه ای آزمایش کردید؟
این اتفاق دو هفته قبل از پست شما افتاده و از اون موقع فایلها هر ۴۸ ساعت یک بار تست میشن.

esafb52
سه شنبه 26 آذر 1392, 22:37 عصر
سلام وقتی تعداد سوالات رو برابر تعداد سوالات موجود در دیتا بیس در نظر میگیرم برنامه کلا هنگ میکنه. دقیقا تو این حلقه هنگ میکنه:
http://upload7.ir/viewer.php?file=58538943786836036070.jpg
دوست عزیز بجای عکس متن خطا رو بذارین !!

peiman.oruji
چهارشنبه 27 آذر 1392, 16:52 عصر
سلام. خطا نمیده فقط هنگ میکنه.رفتم خط به خط اجراش کردم تو همین حلقه می افته!

veniz2008
چهارشنبه 27 آذر 1392, 22:27 عصر
با سلام و تشکر فراوان بخاطر این آموزش بسیار روان و پر محتوا !

من از قابلیت asynchronous Delegate برای بکاپ گیری برنامه ام استفاده کرده ام اما در CPU های تک هسته ای برنامه اجرا نمیشود :افسرده:

لطفا راهنمایی کنید چگونه از این قابلیت در این سیستم ها استفاده کنم !!!
سلام.
تا اونجایی که بنده اطلاع دارم cpu های تک هسته ای از چند نخی پشتیبانی نمیکنند بنابراین این cpuها،قابلیت های روش های برنامه سازی همزمان (مثل تردها، asynchronous delegate و ...) رو ندارند. بهتره در این زمینه جستجو کنید شاید راه حلی وجود داشته باشه.


سلام آقا من تا گرفتن پشتیبان رو مثل برنامه آموزشی نوشتم، ولی وقتی دکمه پشتیبان گیری رو میزنم این ارور رو میده:
http://upload7.ir/images/89645944737623497489.jpg

Cannot open backup device C:\program file\microsoft SQlserver\MSSQL.1\MSSQL\Backup\mybackup.bak

مرگ من جواب بدین پروژه پایان ترم میخوام بدمش
سلام.
دوست عزیز، اگر متن خطا و مسیری رو که درون برنامه وارد کردید با هم مقایسه کنید می بینید که دو مسیر کاملا متفاوت هست. ظاهرا فایل های پشتیبان رو بر روی desktop ذخیره می کنید ولی زمانیکه میخواید فایل رو انتخاب کنید دارید از یک مسیر دیگه (C:\programfiles) استفاده می کنید که متن خطا هم داره بهتون میگه که چنین فایلی در اون مسیر وجود نداره. مسیرهایی رو که درون برنامه وارد می کنید به دقت چک کنید تا مشکلتون برطرف بشه.(شاید دیدن مجدد ویدئو هم بهتون کمک کنه).

سلام وقتی تعداد سوالات رو برابر تعداد سوالات موجود در دیتا بیس در نظر میگیرم برنامه کلا هنگ میکنه. دقیقا تو این حلقه هنگ میکنه:
http://upload7.ir/viewer.php?file=58538943786836036070.jpg
سلام.
مشکل بخاطر پارامتر دوم متد رندوم هست. در تابع رندوم ( (rand.next(min,max) ) همیشه مقدار max رو یکی کمتر در نظر میگیره مثلا اگر min = 1 و max = 10 باشه، یک عدد بین 1 تا 9 برای شما تولید میکنه (اعداد 1 و 9 میتونن جز اعداد تولید شده باشند ولی عدد 10 رو شامل نمیشه). برای رفع این مشکل کافیه به max یکی اضافه کنید یعنی اگر میخواید عدد رندومی بین 1 و 10 تولید کنید که خود اعداد 1 و 10 هم امکان انتخاب شدن داشته باشند بایستی بازه رو بین 1 و 11 انتخاب کنید ( min = 1 و max = 11).
بنابراین برای رفع مشکلتون به عدد موجود در آخرین سطر دیتاتیبل یکی اضافه کنید.
کدها رو نسبت به قبل بهینه تر کردم که می تونید از کدهای زیر استفاده کنید :

while (MyListResult.Items.Count < Convert.ToInt32(TxtQuestionNumber.Text.Trim()))
{
Random rand = new Random();
num = rand.Next(Convert.ToInt32(dt.Rows[0][0]), Convert.ToInt32(dt.Rows[dt.Rows.Count - 1][0]) + 1);
//
for (int i = 0; i < dt.Rows.Count ; i++)
{
if (num == Convert.ToInt32(dt.Rows[i][0]))
{
i = dt.Rows.Count;
if (MyListResult.Items.Count == 0)
MyListResult.Items.Add(num);
else if (!MyListResult.Items.Contains(num))
MyListResult.Items.Add(num);
}
}
}
موفق باشید.

m_soheyl_s
سه شنبه 10 دی 1392, 22:13 عصر
veniz2008 (http://barnamenevis.org/member.php?155296-veniz2008) عزیز
متاسفانه هفته ی پیش سایت پرشین گیگ غیر قابل دسترس شد و الان که دوباره راه افتاده فایل های این آموزش پاک شده اند.
خواهشمندم دوباره این فایلها را آپلود نمایید.
با تشکر فراوان از شما.

esafb52
سه شنبه 10 دی 1392, 22:45 عصر
تو امضا فست کد لینکش هست
http://78.47.35.18/veniz/

veniz2008
چهارشنبه 11 دی 1392, 00:20 صبح
veniz2008 (http://barnamenevis.org/member.php?155296-veniz2008) عزیز
متاسفانه هفته ی پیش سایت پرشین گیگ غیر قابل دسترس شد و الان که دوباره راه افتاده فایل های این آموزش پاک شده اند.
خواهشمندم دوباره این فایلها را آپلود نمایید.
با تشکر فراوان از شما.
ممنونم که اطلاع دادید.
جناب FastCode زحمت کشیدن و تمام ویدئوها رو دوباره بر روی پرشین گیگ آپلود کردن.
دوستان به مانند سابق می تونن ویدئوها رو دانلود کنن.
با تشکر از جناب FastCode .

jafarpalideh
چهارشنبه 11 دی 1392, 10:59 صبح
با تشكر از Veniz عزيز باطر اين آموزش ها
يه سوال داشتم :
چطور ميتونيم هنگام وارد كردن داده(مثلا بر اساس گروه ميخوام سوال وارد كنم و هربار كه يه سوال ثبت ميشه فوكوس روي همون گروه بمونه) فوكوس همچنان روي همون كمبوباكسي كه روش هستيم بمونه و نياد روي ايندكس صفر .
البته شرمنده بابت اين سوال .

veniz2008
چهارشنبه 11 دی 1392, 12:28 عصر
چطور ميتونيم هنگام وارد كردن داده(مثلا بر اساس گروه ميخوام سوال وارد كنم و هربار كه يه سوال ثبت ميشه فوكوس روي همون گروه بمونه) فوكوس همچنان روي همون كمبوباكسي كه روش هستيم بمونه و نياد روي ايندكس صفر .

کافیه که قطعه کد ;CmbGroup.SelectedIndex = 0 رو از درون متد ClearTextBox (یا هر جای دیگه ای که اون کد رو نوشتید) بردارید تا فوکوس روی همون گروه جاری باقی بمونه.
موفق باشید.

hassan20000
جمعه 20 دی 1392, 08:19 صبح
سلام من در قسمت برگزاري آزمون بعداز اينكه تعداد سوالات و گروه امتحاني را انتخاب كردم بعد نمايش دو سه بار سوالات ، سيستم هنگ مي كند علت چيست ؟
تمام قسمت هاي كد را چك كردم مشكل نداشت

veniz2008
جمعه 20 دی 1392, 11:35 صبح
سلام.
دوست عزیز وقتی خطایی براتون اتفاق می افته باید کدتون رو بذارید تا بشه راهنمایی درستی رو انجام داد. الان با این کار باید دو پست اضافه دیگه هم ایجاد بشه!. یکی برای گذاشتن کد شما و دیگری هم برای جواب من.
بگذریم...
قبل از اینکه کدتون رو بذارید چند تا نکته رو میگم شاشد مشکلتون حل شد :
1. جستجوی سوالات غیر تکراری رو به SQL بسپارید. این کار هم بسیار اصولی تر هست و هم سریعتر.
2. اگر اصرار به جستجوی سوالات در سمت ویژوال و با کدهای سی شارپ رو دارید، حتما توضیحات پست 169 همین تاپیک (چندتا پست بالاتر) رو مطالعه کنید. چون هم دلیل خطا رو توضیح دادم و هم کد بهینه تری رو قرار دادم تا سرعت جستجو و نمایش سوالات افزایش پیدا کنه.
موفق باشید.

hassan20000
جمعه 20 دی 1392, 17:36 عصر
ممنون كه پاسخ داديد
ولي در قسمت كد هاي زير در اجرا خطا مي گيرد فيلم ها چند با با دقت نگاه كردم ولي مشكل حل نشد


public void UncheckRadioButton(Control parent)
{
foreach (Control ctrl in Parent.Controls)
{
if (object.ReferenceEquals(ctrl.GetType(), typeof(RadioButton)))
{
((RadioButton)ctrl).Checked = false;
}
}
}

hassan20000
جمعه 20 دی 1392, 17:46 عصر
از اينكه به بهترين شكل ممكن و در نهايت آرامش و باحوصله آموزش داده ايد بسيا ر متشكر و ممنونيم انشااله اين آموزش زكات علم ات باشد
ديگر اينكه خطا فقط در حرف p بود كه حل شد p با حرف كوچك
public void UncheckRadioButton(Control parent)
{
foreach (Control ctrl in parent.Controls)
{
if (object.ReferenceEquals(ctrl.GetType(), typeof(RadioButton)))
{
((RadioButton)ctrl).Checked = false;
}
}
}

veniz2008
چهارشنبه 25 دی 1392, 22:11 عصر
با درود و سپاس فراوان به شما آقای ونیز2008 :
من یه چیزی میخواستم بپرسم ، اینکه کار هایی در سیستم سرور در ویدیوی 16 انجام دادی شما رو می تونیم با کد با Query انجام بدیم ؟

سلام.
عذر میخوام بابت دیر جواب دادن.
واقعیتش اینه که روی کاغذ و بصورت تئوری انجام دادن تمام کارهای sql با استفاده از query امکان پذیر هست! ولی در عمل بعضی از موارد میتونه دشوار باشه (من خودم بعضی هاش رو انجام ندادم مثل همون قسمت SQL Server Configuration Manager) ولی بعضی دیگه از موارد مثل ساخت user و دادن سطح دسترسی و ... کار راحت تری هست.
ولی در عمل معمولا در سیستم های کلاینت - سروری نیاز خواهید داشت که حداقل یکبار رو بصورت دستی به تنظیم خصوصیات و ریزه کاری ها بپردازید (یا حضوری یا از راه دور (مثل استفاده از Teamviewer)).
موفق باشید.

حمیدرضا1
چهارشنبه 25 دی 1392, 22:18 عصر
سلام.آقا شرمنده.مشکل از پلیر من بود.کدک هاشو گرفتم درست شد.شرمنده که اشتباه خودم رو به پای اشتباه شما حساب کردم.خیلی معذرت میخوام و ممنون بابت ویدیوها

حمیدرضا1
چهارشنبه 25 دی 1392, 23:34 عصر
سلام خدمت ونیز عزیز که این آموزش ها رو زحمت کشیدن و گذاشتن.من تا ویدیو ی شیشم دیدم.به نظرتون بهتر نیست دست کاربر رو خیلی باز نگذاریم.مثلا وقتی در فرم سوالات روی گرید کلیک میکنه اطلاعاتش میاد داخل تکست باکسا.حالا فرض کنید کاربر کلید افزودن رو زد،پس دکمه ی حذف و ویرایش غیر فعال میشه.ولی گرید فعاله و کاربر میتونه با کلید روی اون اطلاعات رو وارد تکست باکسا کنه و اطلاعات تکراری وارد کنه.
من یه پروژه ی دیگه تو همین تالار دیدم که اومده بود چند تا حالت تعریف کرده بود.مثل حالت GoToAddOrEditMode .بع میومد تو این حالات ،بسته به این که چه کلیدی زده بشه،گرید و دکمه های دیگر را غیر فعال میکرد و اجازه ی کارای بیهوده به کاربر نمیداد و به عبارتی کاربر نمیتونست تو پروژه خرابکاری بکنه.یا مثلا در اینجا وقتی کلید افزودن فعال میشه،دیگه حالتی برای انصراف نداریم.میشه اینم توضیح بدین چجوری بزاریم.ممنون

veniz2008
پنج شنبه 26 دی 1392, 00:12 صبح
سلام خدمت ونیز عزیز که این آموزش ها رو زحمت کشیدن و گذاشتن.من تا ویدیو ی شیشم دیدم.به نظرتون بهتر نیست دست کاربر رو خیلی باز نگذاریم.مثلا وقتی در فرم سوالات روی گرید کلیک میکنه اطلاعاتش میاد داخل تکست باکسا.حالا فرض کنید کاربر کلید افزودن رو زد،پس دکمه ی حذف و ویرایش غیر فعال میشه.ولی گرید فعاله و کاربر میتونه با کلید روی اون اطلاعات رو وارد تکست باکسا کنه و اطلاعات تکراری وارد کنه.
من یه پروژه ی دیگه تو همین تالار دیدم که اومده بود چند تا حالت تعریف کرده بود.مثل حالت GoToAddOrEditMode .بع میومد تو این حالات ،بسته به این که چه کلیدی زده بشه،گرید و دکمه های دیگر را غیر فعال میکرد و اجازه ی کارای بیهوده به کاربر نمیداد و به عبارتی کاربر نمیتونست تو پروژه خرابکاری بکنه.یا مثلا در اینجا وقتی کلید افزودن فعال میشه،دیگه حالتی برای انصراف نداریم.میشه اینم توضیح بدین چجوری بزاریم.ممنون
سلام.
دقیقا متوجه منظورتون نشدم ولی اگر درون ویدئوها رو دقت کنید در یک لحظه یا کلید "ثبت" فعال هست یا کلیدهای "حذف" و "تصحیح".
مثلا در لحظه اولیه فقط دکمه ثبت فعال هست ولی وقتی کاربر، یک رکورد خاص رو انتخاب میکنه معناش این هست که قصد داره یا تصحیح کنه یا حذف رو انجام بده، به همین خاطر دکمه ثبت رو براش غیرفعال میکردیم ولی اینو بدونید که شیوه طراحی کاملا سلیقه ای هست.
به قول شما یه نفر به یه شکل دیگه ای طراحی رو انجام میده و من به یه شکل دیگه. باید نرم افزارهای مختلف رو ببینید و با توجه به سلیقه خودتون بهترین شیوه رو انتخاب کنید (در کل نمیتونم در بخش طراحی بخاطر سلیقه ای بودن اظهارنظر بیشتری رو انجام بدم).
برای حالت انصراف هم میشه یه دکمه گذاشت و درون اون وضعیت دکمه ها رو به حالت پیش فرض تغییر داد (دکمه ثبت فعال بشه و دکمه های حذف و تصحیح غیر فعال و تکست باکس ها هم خالی بشن).

حمیدرضا1
پنج شنبه 26 دی 1392, 10:44 صبح
سلام.
دقیقا متوجه منظورتون نشدم ولی اگر درون ویدئوها رو دقت کنید در یک لحظه یا کلید "ثبت" فعال هست یا کلیدهای "حذف" و "تصحیح".
مثلا در لحظه اولیه فقط دکمه ثبت فعال هست ولی وقتی کاربر، یک رکورد خاص رو انتخاب میکنه معناش این هست که قصد داره یا تصحیح کنه یا حذف رو انجام بده، به همین خاطر دکمه ثبت رو براش غیرفعال میکردیم ولی اینو بدونید که شیوه طراحی کاملا سلیقه ای هست.
به قول شما یه نفر به یه شکل دیگه ای طراحی رو انجام میده و من به یه شکل دیگه. باید نرم افزارهای مختلف رو ببینید و با توجه به سلیقه خودتون بهترین شیوه رو انتخاب کنید (در کل نمیتونم در بخش طراحی بخاطر سلیقه ای بودن اظهارنظر بیشتری رو انجام بدم).
برای حالت انصراف هم میشه یه دکمه گذاشت و درون اون وضعیت دکمه ها رو به حالت پیش فرض تغییر داد (دکمه ثبت فعال بشه و دکمه های حذف و تصحیح غیر فعال و تکست باکس ها هم خالی بشن).

ممنون که جواب دادین.
منظورم اینه که وقتی کاربر دکمه ی افزودن رو میزنه،خب حتما منظورش افزودن یک رکورد بوده.حالا باید دکمه ی حذف و ویرایش غیر فعال بشه و دیگه نباید بتونه سطر جدیدی رو انتخاب کنه.چرا که هدفش افزودن یک سطر جدید بوده.کلید انصراف هم اگه بزاریم خوبه.چرا که وقتی انصراف رو زد،دوباره دکمه ی افزودن و ویرایش و حذف فعال میشه و گرید هم فعال میشه.یعنی عملیات کنونی که قصد انجامش رو داشتیم،لغو میشه.در کل منظورتون رو فهمیدم.ممنون

peiman.oruji
جمعه 27 دی 1392, 13:28 عصر
با سلام و تشکر از Veniz2008! میخواستم بپرسم اگه نخواستیم در بخش گزارش گیری از نمایش زمان استفاده کنیم،نیازی به دیتا ست نیست و میشه فقط از data table استفاده کردعــــایا؟

esafb52
جمعه 27 دی 1392, 13:54 عصر
بله دوست عزیز

حمیدرضا1
شنبه 26 بهمن 1392, 09:50 صبح
ممنون دوست عزیز.فایل ها سالم بود.مشکل از پلیر من بود.عذر خواه هستم

ali.alavi245
یک شنبه 18 اسفند 1392, 13:28 عصر
با سلام و تشکر از آموزش بسیار خوبتان که برای ما شهرستانی ها که دسترسی به کلاسهای معتبر وحرفه ای نداریم بهترین مرجع آموزشی برای یادگیری است
من ویدوئوی مربوط به گزارش گیری را دیدم و سوالی برای من پیش آمد
وقتی در فیلدهای بانک اطلاعاتی من متن فارسی انگلیسی باهم وجود داشته باشد در هنگام گزارش گیری این متون بهم ریخته نمایش داده میشوند
با اینکه این متون در دیتابیس بصورت درست ذخیره شده اند و هنگام نمایش سوال در فرم بهم ریخته نیست اما هنگامی که در گزارش گیری آورده میشود بهم ریخته می شود
ضمنا من هم برای شیء Data و هم برای page در استیمول خاصیت right to left را true قرار دادم اما باز در هنگام گزارش گیری این مشکل وجود دارد
سوال من این است که آیا راه حلی برای این مشکل وجود دارد؟ و یا استفاده از دیتاتیبل باعث ایجاد این مشکل میشود
چون وقتی از خود اطلاعات جدول در استیمول گزارش میگیرم فیلدها به درستی دیده میشوند.
با تشکر

veniz2008
دوشنبه 19 اسفند 1392, 10:24 صبح
وقتی در فیلدهای بانک اطلاعاتی من متن فارسی انگلیسی باهم وجود داشته باشد در هنگام گزارش گیری این متون بهم ریخته نمایش داده میشوند
با اینکه این متون در دیتابیس بصورت درست ذخیره شده اند و هنگام نمایش سوال در فرم بهم ریخته نیست اما هنگامی که در گزارش گیری آورده میشود بهم ریخته می شود
ضمنا من هم برای شیء Data و هم برای page در استیمول خاصیت right to left را true قرار دادم اما باز در هنگام گزارش گیری این مشکل وجود دارد
سوال من این است که آیا راه حلی برای این مشکل وجود دارد؟ و یا استفاده از دیتاتیبل باعث ایجاد این مشکل میشود
چون وقتی از خود اطلاعات جدول در استیمول گزارش میگیرم فیلدها به درستی دیده میشوند.
سلام.
مشکل از دیتاتیبل نیست، بلکه باید یک خاصیت رو در محیط استیمول برای Text ها فعال کنید که بصورت پیش فرض False هست.
برای حل این مشکل در محیط استیمول، همه Text ها رو با گرفتن کلید Ctrl انتخاب کنید. بعدش در قسمت properties یک گزینه Text Options دارید که خصوصیات کلی متن رو نمایش میده. در بین خصوصیاتش یک گزینه به نام RightToLeft داره که بصورت پیش فرض False هست. این گزینه رو بصورت دستی با کلمه True جایگزین کنید. فایل گزارشتون رو save کنید و دوباره تست کنید.
http://veniz2008.persiangig.com/image/az4.JPG
نتیجه رو هم می تونید در تصویر زیر مشاهده کنید :
http://veniz2008.persiangig.com/image/az3.JPG
موفق باشید.

behnam-soft
جمعه 22 فروردین 1393, 22:53 عصر
جناب Veniz 2008 شما در ویدئوی سوم یا چهار -اگر اشتباه نکنم- برای پر کردن کمبو باکسی که در زمان لود فرم اتفاق می افته یه روش استاندارد گفتید که من فقط کدش رو یه جایی یادداشت کردم، الان که دارم یکی از برنامه های قدیمی مو بازسازی می کنم، اون کد رو که می نویسم کار نمی کنه و خطا میگیره، من اشتباه نوشتم یا کد شما در C#2008 اجرا نمیشه؟
کدی که من نوشتم :
dataGridViewX1.DataSource =b.ShowBakhsh((DataRowView)cmbShahrestan.SelectedV alue)["id"]);

mamad_tanha_2006
دوشنبه 01 اردیبهشت 1393, 19:28 عصر
جناب Veniz 2008 شما در ویدئوی سوم یا چهار -اگر اشتباه نکنم- برای پر کردن کمبو باکسی که در زمان لود فرم اتفاق می افته یه روش استاندارد گفتید که من فقط کدش رو یه جایی یادداشت کردم، الان که دارم یکی از برنامه های قدیمی مو بازسازی می کنم، اون کد رو که می نویسم کار نمی کنه و خطا میگیره، من اشتباه نوشتم یا کد شما در C#‎2008 اجرا نمیشه؟
کدی که من نوشتم :
dataGridViewX1.DataSource =b.ShowBakhsh((DataRowView)cmbShahrestan.SelectedV alue)["id"]);
سلام دوست عزیز
این کد شما دقیقا کارش چیه ؟
ShowBakhsh چیه؟
برای منبع دیتا گرید باید از دیتا تیبل استفاده کنی

mamad_tanha_2006
دوشنبه 01 اردیبهشت 1393, 19:43 عصر
سلام جناب ونیز
ضمن تشکرات فراوان بابت آموزش خوب و عالیتون
وقتی میخوام فرم اصلی رو لود کنم و در لود اون ابتدا فرم لوگین لود میشه ـ اروری بصورت زیر میده :
118229
کدهام هم دقیقا کدهای خودتون هست
میدونم که این به این معنیه که هنوز منو ساخته نشده ولی هرکاری میکنم این مشکلم رفع نمیشه
واقعا مونم چیکار کنم ممنون میشم اگه راهنماییم کنین
اینم کدهای مربوط به لود فرم اصلی



private void FrmMain_Load(object sender, EventArgs e)
{

FrmLogin flogin = new FrmLogin();



flogin.ShowDialog();


if (flogin.DialogResult !=DialogResult.OK)


Application.ExitThread();


if (FrmLogin.myflag == 1)

{



menuStrip1.Items[
"M0"].Enabled = false;

}

esafb52
دوشنبه 01 اردیبهشت 1393, 22:36 عصر
شاید اسم این ایتمت اشتباه هست که خطای نال رو بهت میده

mamad_tanha_2006
سه شنبه 02 اردیبهشت 1393, 00:42 صبح
شاید اسم این ایتمت اشتباه هست که خطای نال رو بهت میده
جالبه
اینقد نشستم بررسیش کردم اصلا به فکرم هم خطور نکرد که شاید اسم آیتمم M0 نباشه :ناراحت::ناراحت::ناراحت:
همه شون رو درست اسم گذاشته بودم این یکی رو حواسم نبوده
خیلی خیلی ممنون آقای esafb52 واقعا کمک بزرگی کردی

esafb52
سه شنبه 02 اردیبهشت 1393, 09:03 صبح
خواهش میکنم همیشه باید به نکات ریز در کار باید توجه کرد ضمنا باید از ونیز تشکر کنی من خیلی چیزا رو از اون یاد گرفتم

mamad_tanha_2006
سه شنبه 02 اردیبهشت 1393, 15:33 عصر
خواهش میکنم همیشه باید به نکات ریز در کار باید توجه کرد ضمنا باید از ونیز تشکر کنی من خیلی چیزا رو از اون یاد گرفتم
مرسی از لطفتون
من به برنامه نویسی خیلی علاقه دارم ، از روز اولی که رفتم دانشگاه به C++‎‎‎‎‎‎ علاقمند شدم. هنوزم دارم ادامه میدم. بزرگانی مثل شما و جناب ونیز هستند که به آدم روحیه و امید میدن . با آرزوی موفقیت و شادی روز افزون
راستی یه سوال ، فقط اگه خنده دار بود بهم نخندین :d
میخوام به یه روش دیگه این برنامه رو پیاده کنم . یعنی یه کلاس در نظر بگیرم برای هر سوال یه شیی بسازم که دارای همین خصوصیت ها باشه یعنی یه چیز تو این مایه ها:



class
Question

{


private int QuestionID ;


private int GroupId;


private string QuestionText ;


private string Case1 ;


private string Case2 ;


private string Case3 ;


private string Case4 ;


private int Answer;

}


بنظرتون تو افزایش کارآیی برنامه تاثیری داره ؟

behnam-soft
سه شنبه 02 اردیبهشت 1393, 19:01 عصر
سلام دوست عزیز
این کد شما دقیقا کارش چیه ؟
ShowBakhsh چیه؟
برای منبع دیتا گرید باید از دیتا تیبل استفاده کنی
دوست من، من از روش 3 لایه استفاده کردم که یه متد داره که کارش نشون دادن بخش هاست اما در زمان اود فرم به مشکل بر می خوردم که با کلی جستجو در سایت های انگلیسی زبان، با یه خط کد مشکلم حل شد!

haamidd
جمعه 26 اردیبهشت 1393, 16:00 عصر
سلام علیکم. ببخشید در قسمت 9 و در بخش ایجاد اعداد تصادفی گیر کردم!

من تمامی کدهارو درست وارد کردم ولی این ارور رو میده

این کدهای من:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AzmoonGir
{
public partial class frmTest : Form
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=AzmoonGir;User ID=sa;Password=123456;Persist Security Info=True");
DataTable dt;
int rndNum;
public frmTest()
{
InitializeComponent();
}

private void frmTest_Load(object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter("sp_SelectAllGroup", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
da.Fill(dt);
comboBox1.DataSource = dt;
comboBox1.DisplayMember = "GroupName";
comboBox1.ValueMember = "GroupId";
}

private void button1_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("sp_CheckQuestionNumber", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("QuestionNumber", textBox1.Text);
cmd.Parameters.AddWithValue("GroupId", ((DataRowView)comboBox1.SelectedItem)["GroupId"]);
cmd.Parameters.Add("@Result", SqlDbType.Int);
cmd.Parameters["@Result"].Direction = ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
con.Close();

int res = Convert.ToInt32(cmd.Parameters["@Result"].Value);
if (res == 0)
{
MessageBox.Show("تعداد سوالات کمتر از میزان درخواستی شما می باشد");
}
else if (res == 1)
{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
dt = new DataTable();
da.Fill(dt);

ListBox lst = new ListBox();


while (lst.Items.Count < int.Parse(textBox1.Text))
{
Random rnd = new Random();
rndNum = rnd.Next((int)dt.Rows[0][0], (int)dt.Rows[dt.Rows.Count][0]);
for (int i = 0; i < dt.Rows.Count - 1; i++)
{
if (rndNum == (int)dt.Rows[i][0])
{
for (int j = 0; j < lst.Items.Count; j++)
{
if (rndNum == (int)lst.Items[j])
{
j = lst.Items.Count;
}
else if (j == lst.Items.Count - 1)
{
lst.Items.Add(rndNum);
}
}
}
}

for (int i = 0; i < lst.Items.Count; i++)
{
listBox1.Items.Add(lst.Items[i]);
}
}


}
}
}
}



این هم تصویر ارور:

119109

esafb52
دوشنبه 29 اردیبهشت 1393, 00:24 صبح
خطات خیلی ساده اس میگه این سطر که داری بهش اشاره میکنی بزرگتر از تعداد سطرهاست حلقه ات رو باید جوری اصلاح کنی که بهت گیر نده ضمنا چون مقادیر دیتا تیبل از صفر شروع میشه اون عدد رو منهای یک بکن

amir_87
یک شنبه 11 خرداد 1393, 15:57 عصر
سلام
میشه لطفا در مورد connection string توضیح بدین!
توی پروژه شما از server استفاده کردین برای معرفی دیتا بیس . بعضی جاهای دیگه من دیدم از data source استفاده می کنند . همچنین در مورد بقیه گزینه ها .
پروژه من اصلا به دیتا بیس وصل نمی شه. :ناراحت:من اسمه دیتا بیسم و یادم نیست و وقتی می خوام وارد خود sql server management شم و با دیتا بیس conect شم از . (دات) استفاده می کنم و توی کانکشن استرینگ هم فقط از .(دات) استفده می کنم ! دلیلش همینه که به دیتا بیس وصل نمیشه؟ اگه مشکلش اینه راهنماییم کنید باید اسم دیتا بیسمو از کجا پیدا کنم .
ممنون میشم راهنماییم کنید .

hsdnhd
پنج شنبه 05 تیر 1393, 23:14 عصر
من قسمت اول رو دانلود موقع اکسترکت رمزمیخواد توی متن هاتون توضیحی درمورد رمزنداده بودید این مشکل را رفع کنید لطفا

hsdnhd
جمعه 06 تیر 1393, 15:06 عصر
من قسمت اول رو دانلود موقع اکسترکت رمزمیخواد توی متن هاتون توضیحی درمورد رمزنداده بودید این مشکل را رفع کنید لطفا

این مشکل رمزبرای بقیه نیست؟من چیکارکنم؟یک نفرجوابی بده بالاخره چیکارکنم؟

veniz2008
شنبه 07 تیر 1393, 15:51 عصر
من قسمت اول رو دانلود موقع اکسترکت رمزمیخواد توی متن هاتون توضیحی درمورد رمزنداده بودید این مشکل را رفع کنید لطفا


این مشکل رمزبرای بقیه نیست؟من چیکارکنم؟یک نفرجوابی بده بالاخره چیکارکنم؟
ویدئوهایی رو که خودم بر روی پرشین گیگ آپلود کردم، پسورد ندارند ولی در مورد ویدئوهای آپلود شده بر روی سرور جناب FastCode بی خبرم (هر چند تا چند وقت قبل اونها هم پسورد نداشتند. اگر از اونجا دانلود کردید و پسورد دارند با خودشون مکاتبه کنید).
موفق باشید.

FastCode
شنبه 07 تیر 1393, 23:18 عصر
ویدئوهایی رو که خودم بر روی پرشین گیگ آپلود کردم، پسورد ندارند ولی در مورد ویدئوهای آپلود شده بر روی سرور جناب FastCode بی خبرم (هر چند تا چند وقت قبل اونها هم پسورد نداشتند. اگر از اونجا دانلود کردید و پسورد دارند با خودشون مکاتبه کنید).
موفق باشید.
سلام.
فایلهای من هم رمز ندارند.اگر به تاریخ فایلها نگاه کنید میبینید که از زمانی که روی سرور قرار داده شده‌اند تغییر نکردند.
احتمالا فایل درست دانلود نشده.
میتونید فایل رو با تورنت تعمیر کنید.البته به یک مقدار تجربه نیاز داره.

hsdnhd
یک شنبه 08 تیر 1393, 19:14 عصر
باسلام وتشکرفراوان ازشما
ای کاش ازتکنولوژی های جدید مانندlinqتوی این پروژه استفاده می کردید
چون sqlو اینطوری استفاده ازاون تقیربا منسوخ شده وخیلی کم استفاده میشه چون کدنویسی زیادی داره اگرازتکنولوژی های نواستفاده می کردید هم وقت کمتری میگرفت وحجم فیلم ها پایینترمیومدودوستان هم ازهمین صفربا راحتترنوشتن عادت میکردند

hsdnhd
یک شنبه 08 تیر 1393, 19:15 عصر
سلام.
فایلهای من هم رمز ندارند.اگر به تاریخ فایلها نگاه کنید میبینید که از زمانی که روی سرور قرار داده شده‌اند تغییر نکردند.
احتمالا فایل درست دانلود نشده.
میتونید فایل رو با تورنت تعمیر کنید.البته به یک مقدار تجربه نیاز داره.

فایل شماره 1 رمزداشت
http://barnamenevis.org
بااین رمزبازشد

FastCode
چهارشنبه 11 تیر 1393, 19:35 عصر
اصلا اینقدر با حرف مفت حال میکنم که حساب نداره.

حميدسي شارپ
یک شنبه 29 تیر 1393, 17:56 عصر
سلام.نماز روزه ی همه قبول
ممنون بابت زحمات جناب ونیز و فست کد و همه ی کسایی ک نظر دادن.
خیلی بابت آموزشا ممنون.من این آموزشا رو تموم کردم و البته همون قسمت تولید اعداد تصادفی برای انتخاب رندم سوالات،یه مشکلی بود که سوال آخر هیچ وقت انتخاب نمی شد که البته خدارو شکر تونستم درستش کنم.اون موقع اینترنت نداشتم ک بتونم بیام و این مشکلو بیان کنم...ولی الان خدارو شکر دیگه اینترنت دارم و بیشتر مزاحمتون میشم☺.پروژه رو هم کامل پیاده کردم.با Dev Component و یه سری خلاقیت هایی هم توش دادم.تعریف نباشه☺
حالا باید چیکار کنیم آقای ونیز؟؟؟میدونم شاید با خودتون بگین این دیگه کیه...ما اومدیم اینا رو راه بندازیم ولی دو قورت و نیمشون هم باقیه.ولی باور کنین منظورم اینه که هیچی مثل سردرگمی به یه برنامه نویس تازه کار مثل من ضربه نمیزنه.خواهشی که دارم اینه که بازم مارو کمک کنین.
بریم سراغ برنامه نویسی سه لایه یا Entity یا Linq یا ...
باور کنین بد جوری سر در گمم.خواهشا کمک کنید.شما که تا اینجا زحمت کشیدین،از این به بعد هم ادامه بدین تا اجرتون کامل شه.هر چند که تا الانشم خیلی خیلی محبت کردین ولی از نظر منه مبتدی ، همین Stored Prosedure ها کافیه و دیگه میگم نیازی به بقیه ی چیزا نیست...چرا باید بریم سراغ Linq و Entity و ...
ممنون

FastCode
یک شنبه 29 تیر 1393, 23:27 عصر
سلام.نماز روزه ی همه قبول
ممنون بابت زحمات جناب ونیز و فست کد و همه ی کسایی ک نظر دادن.
خیلی بابت آموزشا ممنون.من این آموزشا رو تموم کردم و البته همون قسمت تولید اعداد تصادفی برای انتخاب رندم سوالات،یه مشکلی بود که سوال آخر هیچ وقت انتخاب نمی شد که البته خدارو شکر تونستم درستش کنم.اون موقع اینترنت نداشتم ک بتونم بیام و این مشکلو بیان کنم...ولی الان خدارو شکر دیگه اینترنت دارم و بیشتر مزاحمتون میشم☺.پروژه رو هم کامل پیاده کردم.با Dev Component و یه سری خلاقیت هایی هم توش دادم.تعریف نباشه☺
حالا باید چیکار کنیم آقای ونیز؟؟؟میدونم شاید با خودتون بگین این دیگه کیه...ما اومدیم اینا رو راه بندازیم ولی دو قورت و نیمشون هم باقیه.ولی باور کنین منظورم اینه که هیچی مثل سردرگمی به یه برنامه نویس تازه کار مثل من ضربه نمیزنه.خواهشی که دارم اینه که بازم مارو کمک کنین.
بریم سراغ برنامه نویسی سه لایه یا Entity یا Linq یا ...
باور کنین بد جوری سر در گمم.خواهشا کمک کنید.شما که تا اینجا زحمت کشیدین،از این به بعد هم ادامه بدین تا اجرتون کامل شه.هر چند که تا الانشم خیلی خیلی محبت کردین ولی از نظر منه مبتدی ، همین Stored Prosedure ها کافیه و دیگه میگم نیازی به بقیه ی چیزا نیست...چرا باید بریم سراغ Linq و Entity و ...
ممنون

سلام.
اول بهتون خسته نباشید میگم چون میدونم کار ساده ای نبوده.
به نظر من بهتره که در حد ابتدایی با همه این تکنولوژی ها آشنا بشید تا بتونید با توجه به نیازتون تکنولوژی درست رو انتخاب کنید.(البته اون سه تکنولوژی که نام بردید در کنار هم قابل استفاده هستند و استفاده از یکی یه هیچ عنوان به معنی استفاده نکردن از دیگری در یک پروژه نیست)
معماری های خیلی مختلف و زیادی برای پیاده سازی برنامه های دیتابیسی وجود دارد که به نظر بنده خود شما ترتیب خوبی برای یادگیری پرکاربردترینهاشون پیشنهاد دادید. وقتی به حد کافی با این تکنولوژی ها کار کنید مطمئنا در طول مسیر بادگیریتون با تکنولوژی های دیگر هم آشنا خواهید شد و میتوانید راه خودتون رو پیدا کنید.
موفق باشید.

حميدسي شارپ
دوشنبه 30 تیر 1393, 01:34 صبح
خیلی ممنون جناب Fast Code
خب راستش این آموزش بی نظیری رو که شاهد بودیم از جناب Veniz جاهای دیگه نبود.آموزش سی شارپ زیاده ولی هدف خیلیاش خالی کردن جیب مردمه.مخصوصا ما مبتدیا.البته من همینجوریش هم جیبم خالیه و اگه کسایی مثل شما و آقای ونیز نباشن ک ما رو کمک کنن دیگه هیچی.
منظور من اینه که این آموزش دیگه ادامه نداره؟اون دفعه جناب ونیز زحمت فیلما رو کشیدن و خیلی بابت این فیلما ازشون تشکر میکنم.به شخصه خیلی چیزا یاد گرفتم.ایشون واقعا استاد بودن.چون مثلا بعد از دو جلسه کد نویسی میرفتن سراغ دیزاین تا یه کم تنوع بشه و آموزشا کسل کننده نباشه و خیلی نکات ریز دیگه ای که نمیشه همشو گفت.این هنره...بازم ازشون تشکر میکنم
و با این که میدونم خواستم بزرگه ولی خواهش میکنم ادامه بدین.اگه آقای Veniz وقت ندارن،شما کمک کنین جناب Fast Code . در مورد همین تکنولوژیای جدید به سبک پروژه محور.والا من که هر چی میگردم یا کیفیت آموزشا پایینه،یا پولیه،یا خیلی مبتدیه،یا خیلی پیشرفتست،یا خیلی تئوری و هیچکدوم عملی نیست.
بازم ممنون.

FastCode
دوشنبه 30 تیر 1393, 03:26 صبح
سلام.
همه این آموزشها برای این هستند که شما راه رو پیدا کنید.نه اینکه همه چیز رو یاد بگیرید.
از اینجا به بعد رو باید با مطالعه پیش برید.
این بهترین راهنمایی ای هست که میتونم بهتون بکنم.چون خود بنده و احتمالا veniz هم برای شروع کارمون به هیچ کدوم از این آموزشها دسترسی نداشتیم و فقط مطالعه بوده که به ما کمک کرده.

موفق باشید.
(اگر چند روز پاسخ ندادم به دل نگیرید.من زیاد مثل قدیم آنلاین نیستم و اینکه جواب دو تا پست پشت سر هم رو دادم خودش یه جور معجزست)

حميدسي شارپ
پنج شنبه 02 مرداد 1393, 01:47 صبح
سلام خدمت همه.توی سایت sourcebaran دیدم یه پکیج آموزشی گذاشته و با پر رویی تمام فیلمای استاد veniz رو به خودش نسبت داده.شایدم برداشت من اینه.مهم اینه که دارن این آموزش رایگان رو همراه با چند تا آموزش دیگه میفروشن.گفتم که در جریان باشین که زحمات استاد هدر نره...
اینم آدرسش:
http://shop1.sourcebaran.com/?p=254

FastCode
جمعه 03 مرداد 1393, 00:38 صبح
سلام خدمت همه.توی سایت sourcebaran دیدم یه پکیج آموزشی گذاشته و با پر رویی تمام فیلمای استاد veniz رو به خودش نسبت داده.شایدم برداشت من اینه.مهم اینه که دارن این آموزش رایگان رو همراه با چند تا آموزش دیگه میفروشن.گفتم که در جریان باشین که زحمات استاد هدر نره...
اینم آدرسش:
http://shop1.sourcebaran.com/?p=254
سلام.
من نمیدونم با خودشون چه فکری کردن.
فقط میدونم من شخصا یه چیزی حدود بیست هزار نسخه از این آموزش رو مجانی سرو کردم و کسی نیست که این آموزش رو ندیده باشه.و متوجه نشه که تبلیغاتی که اینقدر روش تاکید شده کاملا دروغ هست.

ممنون که اطلاع دادید. من سعی میکنم تا یکی دو روز آینده اگر veniz خودش این پست رو ندیده بود بهش اطلاع بدم.

حميدسي شارپ
جمعه 03 مرداد 1393, 18:13 عصر
خواهش میکنم
امیدوارم دیگه همچین چیزایی نباشه.من خودم اون پکیج رو تهیه نکردم.ولی حتما همین فیلماست بدون شک.
کاش توی هر فیلم جناب ونیز خودشونو معرفی میکردن و یا یه نوشته ای توی فیلما بطور ثابت نشون داده میشد که اینا نتونن این کارا رو کنن.در هر حال اجر این کار همیشه برای ایشون خواهد بود.بازم ممنون

veniz2008
جمعه 03 مرداد 1393, 21:47 عصر
سلام خدمت همه.توی سایت sourcebaran دیدم یه پکیج آموزشی گذاشته و با پر رویی تمام فیلمای استاد veniz رو به خودش نسبت داده.شایدم برداشت من اینه.مهم اینه که دارن این آموزش رایگان رو همراه با چند تا آموزش دیگه میفروشن.گفتم که در جریان باشین که زحمات استاد هدر نره...
اینم آدرسش:
http://shop1.sourcebaran.com/?p=254


خواهش میکنم
امیدوارم دیگه همچین چیزایی نباشه.من خودم اون پکیج رو تهیه نکردم.ولی حتما همین فیلماست بدون شک.
کاش توی هر فیلم جناب ونیز خودشونو معرفی میکردن و یا یه نوشته ای توی فیلما بطور ثابت نشون داده میشد که اینا نتونن این کارا رو کنن.در هر حال اجر این کار همیشه برای ایشون خواهد بود.بازم ممنون
سلام.
واقعیت اینه همه جور آدمی پیدا میشه و با واقعیتی که در جامعه مون سراغ داریم انجام چنین کارهایی کار عجیبی نیست هر چند انسان های زیادی هم هستن که به حقوق دیگران احترام میذارن و یه مجموعه رایگان رو پولی نمی کنن. حالا یه احتمالم این وسط بدیم که اون مجموعه ای که اون وب سایت برای فروش قرار داده با مجموعه رایگان ما یکی نباشه.
من اون چیزی رو که باید انجام میدادم رو سعی کردم انجام بدم دیگه باقی کار چندان اهمیتی نداره.
در مورد معرفی کردن خودم یا قرار دادن یه آرم یا نوشته روی آموزش ها هم واقعا برام هیچ اهمیتی نداشت چون هدف چیز دیگه ای بود.
در مورد چند پست قبلتون (پست 202) به نظر من برید سمت کار کردن با Entity Framework (اونم با Code First اش) و با امکانات و قدرت این تکنولوژی هم آشنا بشید. من خودم الان مدت هاست که به EF کوچ کردم و به ندرت از ADO.Net به شکل سابق استفاده میکنم.
موفق باشید.

p.mohammad
پنج شنبه 20 شهریور 1393, 16:05 عصر
سلام دوست من تو ویدیو 10 به مشکل برخوردم اینم عکس از ارور و مشکلم اگه میشه لطفا راهنماییم کنید.123320123321

veniz2008
پنج شنبه 20 شهریور 1393, 20:23 عصر
سلام دوست من تو ویدیو 10 به مشکل برخوردم اینم عکس از ارور و مشکلم اگه میشه لطفا راهنماییم کنید.123320123321
سلام.
این سوال، بارها توی همین تاپیک پرسیده شده و اگه سوالات همین تاپیک رو نگاه می کردید، نیازی به ایجاد یک پست اضافه و جواب تکراری نبود.
درون foreach باید parent (با p کوچک) بنویسید نه Parent( با P بزرگ).
این مشکل از بی دقتی دوستان نتیجه میشه که به parent(با p کوچک) بعنوان ورودی متد UncheckRadioButton توجه نمی کنن.
موفق باشید.

p.mohammad
پنج شنبه 20 شهریور 1393, 22:25 عصر
خیلی ممنون دوست عزیز من نیمی از اون سوال هارو نگاه کردم و چیزی ندیدم گفتم شاید فقط واسه من پیش اومده . به هر حال شرمنده

Roya.Rashidi
جمعه 21 شهریور 1393, 01:22 صبح
سلام میشه خودم یه پروژ رو شروع کنم سولامو اینجا بپرسم یا تایپیک خاصی داره ؟ اگه داره بی زحمت معرفی کنید. مرسی

محمد آشتیانی
جمعه 21 شهریور 1393, 02:19 صبح
سلام
شما پروژتو شروع کن ، هرجا سوالی پیش اومد از امکان جستجوی سایت استفاده کن و نهایتا اگر به راه حل نرسیدی
یه تاپیک جدید با عنوان مناسب و توضیحات کافی ایجاد کن تا دوستان راهنمایی کنن.




موفق باشید.

p.mohammad
دوشنبه 24 شهریور 1393, 01:57 صبح
سلام دوست من ، من ویدیو 12 رو دیدم و به مشکلاتی بر خوردم . اول این که وقتی عمل پشتیبان گیری رو متوقف میکنم یک فایل ناقص با اون اسم ایجاد میشه و باقی میمونه یعنی مثل ویدیو شما خود به خود پاک نمیشه
دوم اینکه من اون ارور مربوط به کد Asynchronous Processing=true واسم پیش نیومد ولی چون شما نوشتین منم نوشتم اما حس میکنم پیش نیومدنش طبیعی نیست و باید پیش میومد و اصلاح میشد . و اینکه من چون دیتا بیس سنگینی نداشتم نتونستم کل برنامه رو تست کنم تا خیالم راحت شه و خیلی نگرانم که مطلبی رو از دست نداده باشم اون عمل توقف پشتیبان گیری هم با سرعت زیاد بزور تونستم تست کنم چون در یکی دو ثانیه بیشتر طول نمیکشید . من کل کد هایی که نوشتم رو میزارم لطفا شما برسی کنید ببینید مشکلی نداشته باشه و این که من فعلا هیچ تغییری در کد ها و حتی اسم های اشیا انجام ندادم برای اینکه مشکلاتم رو بهتر بتونین پیدا کنین . با تشکر از زحمات شما .123457123458123459123460123461

p.mohammad
دوشنبه 24 شهریور 1393, 22:23 عصر
سلام دوست من ، یه مورد دیگه هم که پیش اومده اینه که با فرض این که ما بکاپ هم با موفقیت بگیریم . حالا اگر جدول ادمین ما پاک بشه کل برنامه ارور میده اگه هم ارور نده نمیتونیم با مدیریت وارد بشیم و دسترسی به فرم پشتیبان گیری نداریم . ایده شما واسه حل این مشکل چی هست :متفکر: . با تشکر

nimak2
دوشنبه 05 آبان 1393, 23:15 عصر
بسیار عالی. ولی کاش به جای ADO از LINQ یا EF استفاده میکردین .

saebgh
پنج شنبه 08 آبان 1393, 22:04 عصر
با سلام خدمت دوستان گرامی و اساتید محترم.
2 تا سوال از مشکلم تو نرم افزار آزمون گیردارم ممنون میشم کمکم کنید.
اولیش اینه که تو نرم افزار آموزشی زمان اجرا تو فرم اصلی تو پنل مربوط به نمایش روز و تاریخ و ساعت , ساعت رو برعکس نشون میده به این صورت که اگه مثلا 10 صبح باشه 22 نشون میده و 10 شب رو به جا اینکه بنویسه 22 مینویسه 10.
سوال بعدیم اینه که من تو ویدئو آخر فایل help رو با نر افزار win chm ساختم اما فایل رو به پوشه bin/debug انتقال میدم بعد از تو سی شارپ اجراش میکنم نوشته هام نمیاد.که عکسشو تو فایل زمیمه گذاشتم.
اما همین فایل help تو \Documents\WinCHM Projects\Project1_output\HTML Help اجرا میشه.
خواهشا کمکم کنید
لینک عکس : http://upload7.ir/viewer.php?file=23...4835836232.png (http://upload7.ir/viewer.php?file=23635661094835836232.png)
ممنون میشم کمکم کنید.
یه کمک دیگم میخواسم . من دنبال فایل پچ stimul soft میگردم.جایی پیداش نکردم.خواسم بگم اگه میشه لینکی چیزی بدبن ممنون میشم.
با تشکر

veniz2008
جمعه 09 آبان 1393, 00:31 صبح
با سلام خدمت دوستان گرامی و اساتید محترم.
2 تا سوال از مشکلم تو نرم افزار آزمون گیردارم ممنون میشم کمکم کنید.
اولیش اینه که تو نرم افزار آموزشی زمان اجرا تو فرم اصلی تو پنل مربوط به نمایش روز و تاریخ و ساعت , ساعت رو برعکس نشون میده به این صورت که اگه مثلا 10 صبح باشه 22 نشون میده و 10 شب رو به جا اینکه بنویسه 22 مینویسه 10.
سلام.
مطمئنید ساعت سیستمتتون درسته؟
AM برای صبح و PM نشان دهنده ظهر تا شب هست. چیز دیگه ای به ذهنم نمیرسه!.

سوال بعدیم اینه که من تو ویدئو آخر فایل help رو با نر افزار win chm ساختم اما فایل رو به پوشه bin/debug انتقال میدم بعد از تو سی شارپ اجراش میکنم نوشته هام نمیاد.که عکسشو تو فایل زمیمه گذاشتم.
اما همین فایل help تو \Documents\WinCHM Projects\Project1_output\HTML Help اجرا میشه.

لینک عکس : http://upload7.ir/viewer.php?file=23...4835836232.png (http://upload7.ir/viewer.php?file=23635661094835836232.png)

اگر کلمه winchm رو که مربوط به تهیه فایل help بود جست و جو می کردید، جوابتون رو پیدا می کردید :
http://barnamenevis.org/showthread.php?425735-%D8%B7%D8%B1%DB%8C%D9%82%D9%87-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%B1-%D9%82%D8%B1%D8%A7%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-%D9%81%D8%A7%DB%8C%D9%84-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7-CHM-%D8%A8%D8%A7-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&p=1905518&viewfull=1#post1905518


من دنبال فایل پچ stimul soft میگردم.جایی پیداش نکردم.خواسم بگم اگه میشه لینکی چیزی بدبن ممنون میشم.

http://fakhravary.blogfa.com/post-9.aspx
موفق باشید.

saebgh
جمعه 09 آبان 1393, 01:29 صبح
اگر کلمه winchm رو که مربوط به تهیه فایل help بود جست و جو می کردید، جوابتون رو پیدا می کردید :
http://barnamenevis.org/showthread.php?425735-%D8%B7%D8%B1%DB%8C%D9%82%D9%87-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%B1-%D9%82%D8%B1%D8%A7%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-%D9%81%D8%A7%DB%8C%D9%84-%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7-CHM-%D8%A8%D8%A7-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE&p=1905518&viewfull=1#post1905518


http://fakhravary.blogfa.com/post-9.aspx
موفق باشید.[/QUOTE]


راسش مشکلم با winchm اینه که همون فایل help رو که کپی میکنم تو bin/debug بعدش که روش دابل کلیک میکنم میبینم مثل همون عکسی که براتون گذاشتم شده.اما همین فایل help تو \Documents\WinCHM Projects\Project1_output\HTML Help راحت اجرا میشه.

saebgh
جمعه 09 آبان 1393, 01:55 صبح
سلام وقتی تعداد سوالات رو برابر تعداد سوالات موجود در دیتا بیس در نظر میگیرم برنامه کلا هنگ میکنه. دقیقا تو این حلقه هنگ میکنه:
http://upload7.ir/viewer.php?file=58...6836036070.jpg (http://upload7.ir/viewer.php?file=58538943786836036070.jpg)


سلام. مشکل بخاطر پارامتر دوم متد رندوم هست. در تابع رندوم ( (rand.next(min,max) ) همیشه مقدار max رو یکی کمتر در نظر میگیره مثلا اگر min = 1 و max = 10 باشه، یک عدد بین 1 تا 9 برای شما تولید میکنه (اعداد 1 و 9 میتونن جز اعداد تولید شده باشند ولی عدد 10 رو شامل نمیشه). برای رفع این مشکل کافیه به max یکی اضافه کنید یعنی اگر میخواید عدد رندومی بین 1 و 10 تولید کنید که خود اعداد 1 و 10 هم امکان انتخاب شدن داشته باشند بایستی بازه رو بین 1 و 11 انتخاب کنید ( min = 1 و max = 11).
بنابراین برای رفع مشکلتون به عدد موجود در آخرین سطر دیتاتیبل یکی اضافه کنید.
کدها رو نسبت به قبل بهینه تر کردم که می تونید از کدهای زیر استفاده کنید :

while (MyListResult.Items.Count < Convert.ToInt32(TxtQuestionNumber.Text.Trim()))
{
Random rand = new Random();
num = rand.Next(Convert.ToInt32(dt.Rows[0][0]), Convert.ToInt32(dt.Rows[dt.Rows.Count - 1][0]) + 1);
//
for (int i = 0; i < dt.Rows.Count ; i++)
{
if (num == Convert.ToInt32(dt.Rows[i][0]))
{
i = dt.Rows.Count;
if (MyListResult.Items.Count == 0)
MyListResult.Items.Add(num);
else if (!MyListResult.Items.Contains(num))
MyListResult.Items.Add(num);
}
}
}
موفق باشید.


اگه از همین روشی که میگین که به اضافه 1 کنیم بخوایم تو stored procedure استفاده کنیم دقیقا باید چی بنویسیم؟
ممنون

veniz2008
جمعه 09 آبان 1393, 09:59 صبح
راسش مشکلم با winchm اینه که همون فایل help رو که کپی میکنم تو bin/debug بعدش که روش دابل کلیک میکنم میبینم مثل همون عکسی که براتون گذاشتم شده.اما همین فایل help تو \Documents\WinCHM Projects\Project1_output\HTML Help راحت اجرا میشه.
یا فایل رو اشتباه کپی کردید یا نام فایل رو درست وارد نکردید (همونطور که در تاپیکی هم که واستون گذاشته بودم اون شخص هم دقت نکرده بود و یک نام اشتباه گذاشته بود که وجود خارجی نداشت).

اگه از همین روشی که میگین که به اضافه 1 کنیم بخوایم تو stored procedure استفاده کنیم دقیقا باید چی بنویسیم؟
ممنون
خدایا یا به من صبر فراوان بده یا به این دوستان کمی دقت.
متاسفانه بعضی از دوستان، وحشتناک اذیت می کنن. اذیت کردن نه بخاطر سوال پرسیدن بلکه بخاطر بی توجهی، بخاطر کم دقتی.
نمیشه یک سوال رو 100 بار توضیح داد.
دوست عزیز من توی پیام خصوصی اون همه وقت گذاشتم و این مطلب رو براتون توضیح دادم نتیجش چی شد؟ واقعا این برای من سوال شده که اون همه توضیح دادم واقعا چی شد؟
لطفا به اون جوابی که در پیام خصوصی براتون فرستاده بودم رجوع کنید.
یه درخواستی هم که از دوستان داشتم اینه که برای پرسیدن سوالات این تاپیک از پیام خصوصی استفاده نکنن چون جوابی داده نمیشه.
موفق باشید.

saebgh
جمعه 09 آبان 1393, 15:10 عصر
راسش مشکلم با winchm اینه که همون فایل help رو که کپی میکنم تو bin/debug بعدش که روش دابل کلیک میکنم میبینم مثل همون عکسی که براتون گذاشتم شده.اما همین فایل help تو \Documents\WinCHM Projects\Project1_output\HTML Help راحت اجرا میشه.

یا فایل رو اشتباه کپی کردید یا نام فایل رو درست وارد نکردید (همونطور که در تاپیکی هم که واستون گذاشته بودم اون شخص هم دقت نکرده بود و یک نام اشتباه گذاشته بود که وجود خارجی نداشت).

با سلام
مشکلم رو متوجه شدم .من پروژه رو تو آدرس : D:\Application\Project\C#‎‎‎‎‎‎\MyAzmo on\MyAzmoon\MyAzmoon\bin\Debug ساخته بودم و وقتی فایل help.chm رو اینجا کپی میکنم اجرا نمیشه.مشکلم دقیقا از اسم پوشه #C بود. و اسم پوشه رو به C_sharp تغییر دادم و آدرسش این شد : D:\Application\Project\C-Sharp\MyAzmoon\MyAzmoon\MyAzmoon\bin\Debug خیلی راحت فایل راهنمام اجرا شد.

magical.boy47
جمعه 21 آذر 1393, 00:58 صبح
سلام استاد Veniz من داشتم کدهای شما رو تمرین می کردم به یه مشکل بر خوردم.
126516
Column Question text does not belong to table. در صورتی که این ستون تو جدول من وجود داره. ممنون می شم اگه راهنماییم کنید

veniz2008
جمعه 21 آذر 1393, 13:28 عصر
سلام. من داشتم کدهای شما رو تمرین می کردم به یه مشکل بر خوردم.
126516
Column Question text does not belong to table. در صورتی که این ستون تو جدول من وجود داره. ممنون می شم اگه راهنماییم کنید
سلام بر شما.
متن خطا داره میگه : ستونی با نام QuestionText مربوط به جدول نیست. در واقع دارید سعی میکنید از دیتاتیبل ستونی رو بخونید که درونش وجود نداره.
جدول یا ستون های دیتاتیبل رو بررسی کنید و نام صحیح ستون رو قرار بدید.
موفق باشید.

magical.boy47
جمعه 21 آذر 1393, 16:09 عصر
سلام بر شما.
متن خطا داره میگه : ستونی با نام QuestionText مربوط به جدول نیست. در واقع دارید سعی میکنید از دیتاتیبل ستونی رو بخونید که درونش وجود نداره.
جدول یا ستون های دیتاتیبل رو بررسی کنید و نام صحیح ستون رو قرار بدید.
موفق باشید.

سلام مجدد به شما ممنون از پاسختون
ستون مورد نظر داخل جدول وجود داره ولی بازم این پیغامو میده. این قسمت تمرین من مربوط به ویدیو 10 وقتی نمایش سوالاتو می زنم سوال اول به خوبی از دیتا بیس و از ستون Question Text خونده می شه ولی وقتی روی دکمه بعدی کلیک می کنم تا سوال بعدی نمایش داده بشه ای پیغامو میده.
126526

veniz2008
جمعه 21 آذر 1393, 23:42 عصر
سلام مجدد به شما ممنون از پاسختون
ستون مورد نظر داخل جدول وجود داره ولی بازم این پیغامو میده. این قسمت تمرین من مربوط به ویدیو 10 وقتی نمایش سوالاتو می زنم سوال اول به خوبی از دیتا بیس و از ستون Question Text خونده می شه ولی وقتی روی دکمه بعدی کلیک می کنم تا سوال بعدی نمایش داده بشه ای پیغامو میده.
126526
دیتاتیبل رو جهت تست درون یه گرید بریزید و ستون های گرید رو مشاهده کنید ببینید ستونی به نام QuestionText موجود هست یا نه. همچنین می تونید به جای نام ستون از شماره ستون معادل در دیتاتیبل (شماره عددی) هم استفاده کنید.

systam
شنبه 22 آذر 1393, 09:53 صبح
سلام دوستان
من توی سایت و توی نت رو گشتم برنامه ای برای کد کردن عکس هاس بایگانی عکس ، چند تای پیدا کردم ولی طور صحیح کار نمیکنه
میخوام که عکس رو کد گزاری کنه که با هیچ نرم افزاری نشه بازش کرد
حالا از دوستان کسی هست که بتونه من رو راهنمایی کنه
ممنون میشم

یا علی

b61_zeus
پنج شنبه 23 بهمن 1393, 15:40 عصر
تشکر بابت آموزش عالی و بی نقصتون
یه سوال داشتم اونم اینه که اگه من بخوام برای پروژه ستاپ درست کنم باید این کانکشن ها رو تغییر بدم یا بدون دستکاری کانکشنها این برنامه روی سیستم مقصد کار میکنه؟
کلا برای ستاپ سازی پروژه ای که از sql server در اون استفاده شده باید روی سیستم هدف هم sql server یا برنامه خاصی نصب بشه؟

mehdinoorani
جمعه 02 مرداد 1394, 11:18 صبح
با سلام
بنده تازه شروع به یادگیری زبان سی شارپ کرده ام.
چند برنامه ساده نوشته و ذخیره کرده ام
اما موقعی که می خواهم دوباره فایل ذخیره شده را باز کنم اصلا باز نمیشه.فقط اگه دی باگ اون را بزنم برنامه ای که درست کرده ام اجرا میشه .
اما کد های نوشته شده اجرا نمیشن تا تغییرات را اعمال کنم.

ویژوال استودیونت 2008 در ویندوز 8.1 کار میکنم.

لطفا راهنمایی فرماید. با تشکر

b0mrang
جمعه 13 آذر 1394, 18:28 عصر
دوستان عزیز سلام
یه سوال دارم اگه بتونید کمکم کنید ممنون میشم
توو پروژه ام یه جک باکس به دیتاگریدویو اضافه کردم حالا می خوام تیک دار بودن یا نبودنش رو چک کنم چجوری باید اینکار رو کنم!!؟ راههای مختلف رو تست کردم جواب نمیده نمیدونم چرا!؟

tdodangeh
سه شنبه 13 بهمن 1394, 08:57 صبح
سلام، من به اين ويدئو ها نياز دارم اما ظاهرن از سايت پرشين برداشته شده و امكان دانلود نيست، ممنون ميشم اگر كسي داره دوباره بذاره، خيلييييي لطف بزرگي مي كنه

juza66
سه شنبه 13 بهمن 1394, 09:34 صبح
سلام

در سایت سورس باران و سورس گذر این آموزش ها وجود داره (مدیران عزیز تبلیغ نیست فقط جهت راهنمایی برای دانلود آموزش ها به دوستمون هستش)

tdodangeh
چهارشنبه 14 بهمن 1394, 09:50 صبح
سلام، ممنون از پاسختون، من هر دو سايت رو بررسي كردم ،چيزي كه من متوجه شدم اين بود كه بايد دي وي دي هاي آموزشي خريداري بشه البته من مشكلي با خريدش ندارم فقط چون بسيار زياد هستن (حدود 6 دي وي دي )مي خواستم مشخصن همين فيلم هاي آموزشي مورد بحث در اين تاپيك رو ببينم خواهش كردم دوستان اگر دارن مجددن آپلود كنن تا ما كه تازه وارد هستم استفاده كنيم ممنون از لطفتون

rahmatipoor
چهارشنبه 22 اردیبهشت 1395, 12:37 عصر
دوست خوب لینکها سالم هستن
من یکی رو چک کردم

YASAMAN95
جمعه 14 خرداد 1395, 15:58 عصر
با سلام و تشکر از دوست عزیزی که این ویدویو رو تهیه کرده است. آموزش ها ی قسمت اول رو قدم به قدم انجام دادم ولی نام سرور sql را خطا میده نمیتونه کانکت بشه.عکس صفحه sql و کد برنامه رو میزارم لطفا راهنمایی کنید.140677140678
ممنون از راهنمایی هاتون.

مریم فاضل
پنج شنبه 10 تیر 1395, 17:54 عصر
سلام دوست
چرا دانلود نمیشه ویدیو ها
چه کنم
:گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه: