خیلی وقت هست که کانکشن استرینگ ننوشتم ولی زمان ما قبل و بعد از مساوی فاصله نمیزاشتن.شاید تغییر کرده یا من یادم نیست.فکر میکنم ارزش امتحان کردن داره.
خیلی وقت هست که کانکشن استرینگ ننوشتم ولی زمان ما قبل و بعد از مساوی فاصله نمیزاشتن.شاید تغییر کرده یا من یادم نیست.فکر میکنم ارزش امتحان کردن داره.
سلام.
یکی از دلایل اصلی برای تولید این آموزش این بود که سوالات تکراری خیلی زیادی می دیدم و همچنان می بینم. خیلی از سوالاتی که روزانه در سطح تالار مطرح میشه در مجموعه وجود داره که اگر دوستان ویدئوها رو به دقت مشاهده کنن میتونه بخشی از سوالاتشون رو پاسخگو باشه ولی همچنان سوالات تکراری به وفور پیدا میشه.
قبلا کانکشن رو به شکل های مختلف تست کرده بودم (از نظر فاصله قبل و بعد از مساوی، حروف کوچیک و بزرگ، استفاده از DataSource یا Server ، یا مثلا DataBase یا Initial Catalog و ...).
از لحاظ فاصله قبل و بعد مساوی خللی در کار ایجاد نمیکنه،یعنی جفت این کانکشن ها به درستی کار می کنند :
SqlConnection con = new SqlConnection("server=.\\md2012;DataBase=DBTest1;I ntegrated Security=True");
یا
SqlConnection con = new SqlConnection("server = .\\md2012;DataBase = DBTest1;Integrated Security = True");
اگر منظورتون چیز دیگه ای هست،لطفا ذکر کنید.
بین حروف کوچیک و بزرگ تفاوتی وجود نداره و اینکه شخصا ترجیح میدم که به جای استفاده از کلمات Data Source و Initial Catalog از کلمات Server و DataBase استفاده کنم چراکه مفهوم کانکشن رو بهتر میشه با این کلمات برای افراد مبتدی توضیح داد و فهم اون به نظرم راحت تر هست.
با سلام و تشکر از فیلم آموزشی
در فیلم قسمت 4 در گرید ویو یک فیلد visble را true گذاشتیم و در زمانی که رکود انتخاب می شد سوال و جوابهای آن رکورد در تکس باکسها نمایش داده می شد.
در گرید ویوی که گذاشته ام visble دو تا فیلدها را true گذاشته ام چگونه می شود با کلیک بر روی هر خانه فیلد دیگر فیلدهای آن را در تکس باکس نمایش دهیم (در ویدئو رکورد انتخاب می کردیم تا اطلاعات آن فیلد به ما نمایش دهد )
سلام دوست عزیز.
احتمالا منظورتون اینه که visible یکسری از ستون ها رو false کردیم تا نمایش داده نشن!.
برای اینکه روی یک سلول (خانه) از گرید کلیک کنید و اطلاعات رو نمایش بدید باید از رویدادهایی مثل CellMouseClick و ... استفاده کنید که مربوط به کلیک کاربر در یک سلول میشن.
در این باره قبلا در سایت خیلی بحث شده که می تونید کدها و رویدادهای مورد نیازتون رو پیدا کنید.
موفق باشید.
چرا وقتی میخوایم از طریق 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'.
برای اینکه فایل مقصدی که برای restore انتخاب کردید وجود داره و توسط یک دیتابیس دیگه استفاده میشه.
یه سوال از استاد ونیز دارم
چطوری میتونم برنامه ای که نوشتم مسیر کانکشن در یک فایل متنی باشه و کاربر بتونه خودش ای پی اون سیستم رو بده و برنامه متصل بشه به بانک
همونطور که دوستم هم گفتن نمیشه همزمان از یک دیتابیس در دو جای متفاوت استفاده کرد و همزمان که توسط برنامه دیگه ای داره استفاده میشه با دیگری بر روی اون دیتابیس تغییرات اعمال کرد. باید قبل از ری استور، تمامی کانکشن های متصل به اون دیتابیس قطع بشه (هیچ استفاده از اون نشه) و بعد از offline کردن اون اقدام به ری استور کنید.
فکر کنم اگر منظور و هدفتون رو کامل توضیح بدید بهتر بتونم راهنمایی کنم.
ip سیستم سرور رو میتونی با قرار دادن یک فرم در پروژه و وارد کردن ip توسط کاربر دریافت کنید و بعد اونو در کانکشن استرینگ اعمال کنید و در صورت صحت اونو یک جایی ذخیره کنید و از اون به بعد از اون کانکشن ذخیره شده استفاده کنید.شما میتونی ip های فعال شبکه رو هم خودتون با کدنویسی بدست بیارید و بعد در یک حلقه، (در یک ساختار try و catch) اقدام به وارد کردن تک تک ip ها کنید تا متوجه بشید کدوم ip مربوط به سرور هست. اینطوری دیگه نیازی به گذاشتن فرم و دریافت ip هم از کاربر نیست. این تاپیک ها رو ببینید :
http://stackoverflow.com/questions/1...s-in-a-network
http://stackoverflow.com/questions/9...t-ipv4-address
من میخوام برنامه رو به کاربر بدم و خودش نصب کنه بدون نیاز من
نظر شما در مورد این کار چیه از چه برنامه ای برای اینستال کردن استفاده کنم و چگونه برنامه ای که بصورت شبکه هست رو کاربر خودش نصب کنه؟
در شبکه بودن نرم افزار بحث یه کم متفاوت هست نسبت به تک کاربره بودن نرم افزار.
چون در شبکه بودن نسخه کامل sql رو نصب میکنن که معمولا حجم زیادی داره و نیاز به یکسری تنظیمات داره که باید حتما برنامه نویس در محل حاضر باشه (یا از راه دور اقدام به نصب کنه) ولی در یک برنامه تک کاربره برای شما sql express کفایت خواهد کرد(بدون نیاز به تنظیمات خاصی).
من گمان میکنم منظور شما نرم افزار تک کاربره هست نه نرم افزاری که قراره در چند سیستم بصورت همزمان کار کنه.
خیلی مهم نیست که با چه نرم افزاری اقدام به تهیه setup کنید. مهم اینه که پیش نیازهایی رو که نیاز هست روی سیستم مشتری نصب بشه وارد یک فایل setup کنید.می تونید با setup خود ویژوال یک فایل ست آپ بسازید. چیزی که مهمه کدنویسی شما برای اتچ خودکار دیتابیس هست.
درباره اتچ کردن خودکار برنامه تاپیک های خیلی زیادی ایجاد شده که توصیه میکنم با جستجو کردن به جواب مورد نظرتون برسید.
موفق باشید.
خب الان چاره چیه؟! چطوری کانکشن ها رو قطع کنم؟ بعدشم شما هم همین کار رو کردین ولی همچین مشکلی نداشتین که!!همونطور که دوستم هم گفتن نمیشه همزمان از یک دیتابیس در دو جای متفاوت استفاده کرد و همزمان که توسط برنامه دیگه ای داره استفاده میشه با دیگری بر روی اون دیتابیس تغییرات اعمال کرد. باید قبل از ری استور، تمامی کانکشن های متصل به اون دیتابیس قطع بشه (هیچ استفاده از اون نشه) و بعد از offline کردن اون اقدام به ری استور کنید.
مسیر restore رو تغییر بدید.
متوجه منظورتون نمیشم.مسیر restore رو تغییر بدید.
من میام یه دیتابیس رو که یه جایی ذخیره شده backup میگیرم و بعد میام restore میکنمش.
بعدش که بخوام دوباره برنامه رو اجرا کنم حب همون دیتابیس اول که استفاده میشد استفاده میشه دیگه. من که connectionstring رو تغییر نمیدم. واقعاً گیج شدم من
ممنون.
فهمیدم مشکل از کجاست. باید توی connection string اسم دیتابیس رو میذاشتم
یه مشکلی در رابطه با قسمت ثبت سوالات پیش اومده!!!!!
من کامله کامل با توجه به فیلم ها قسمت ثبت سوالات رو طراحی کردم اما موقع ثبت یک سوال درون یک گروه امتحانی ، سوال به 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 ثبت شده!!!
-------------------------------------------------------
یه پیشنهادم دارم اینکه سورس پروژه رو واسه دانلود قرار بدین
خیلی خیلی متشکریم:)
سلام با تشکر از آموزشتون که خیلی خوب هست .
شما از کانکشن استرینگ و sql در آموزشتون استفاده کردید و سوال اینه که من فقط روش orm و Linq را بلدم و دانشجو هستم و با این روش پروژه هام را انجام میدم و آیا برای آینده که میخوام وارد بازار کار بشم نیاز به یادگیری کار با کانکشن استرینگ و sql هست ؟ میتونم فقط با همین روش کار کنم ؟
همه ی مطالبی که در مورد همه ی connection string ها وجود داره روی هم ۵۰ صفحه نمیشه.(http://www.connectionstrings.com/)
و یکی از اجزا اصلی هر برنامه دیتابیسی هست.مثل اینکه شما بگید من بدون ظرف غذا میخورم.شاید شما اینطوری بگید و هر کسی نگاه کنه همین رو بگه.ولی بلاخره غذاتون رو دارید از یک جایی میخورید که اسمش میشه ظرف.
در روشهایی هم که گفتید بلاخره ارتباط با دیتابیس وجود داره و راهی برای این کار نیست جز connection string
(بعضی دیتابیسها طراحی متفاوتی دارند و نیاز به connection string ندارند و طبق معمول چون چیز متفاوتی هستند در ایران استفاده نمیشن.)
sp که گذاشتید مربوط به نمایش سوالات یک گروه امتحانی هست ولی سوالتون در ارتباط با ثبت یک سوال هست.
در زمان ثبت برای هر سوال ما GroupID رو ثبت می کنیم تا مشخص بشه سوال درج شده متعلق به کدوم گروه هست.
در مورد QuestionID که گفتید، این فیلد اصلا مشخص کننده گروه خاصی نیست.
من فکر میکنم بهتره یکبار دیگه ویدئوهای مورد نیازتون رو از اول و با دقت بیشتری نگاه کنید.
سلام دوست عزیز.
در تکمیل صبحت های جناب FastCode این مطلب رو بگم که در LINQ و EF هم کانکشن استرینگ وجود داره ولی کاربر نیازی به درگیر شدن با این مفاهیم رو نداره و در واقع در پس زمینه این موارد ست میشه.
شما اگر مفاهیم ADO رو خوب درک کنید در LINQ و Entity Framework هم با مشکل مفاهیم روبرو نخواهید شد چراکه LINQ و EF هم در پس زمینه همون کارهای ADO رو دارند ولی کاربر دیگه درگیر این مفاهیم نمیشه.
بدون شک باید به سمت LINQ و EF حرکت کرد و بازارکار هم روز به روز طلب بیشتری رو برای این تکنولوژی ها میکنه.
در مورد sql هم همونطور که خودتون مستحضر هستید زبان LINQ شما رو بی نیاز به دونستن دستورات خاص sql میکنه ولی همین دستورات در نهایت باز هم به زبان قابل فهم اون دیتابیس (sql، mysql ، oracle یا ...) تبدیل میشه (بدون دخالت کاربر) ولی به شخصه اعتقاد دارم که هیچ چیزی نمیتونه جای یادگیری SQL Server رو بگیره.
موفق باشید.
مشکل اینه وقتی فرم ثبت سوال لود میشه اگر سوال رو برای ایتم اول کمبوباکس ثبت کنم درسته اما وقتی یک گروه دیگه انتخاب میکنم برای بعدیش ثبت میشه!!!!
واقعا چند بار فیلم رو دیدم کپی برابر اصله اما نمیدونم مشکل از کجاست!!!!
اینم کد دکمه ی ثبت سوال
SqlCommand cmd = new SqlCommand("AddQuestion", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@GroupID", cmbGroup.SelectedValue);
cmd.Parameters.AddWithValue("@QuestionText",txtbox Question.Text);
cmd.Parameters.AddWithValue("@txtCase1",textboxCas e1.Text);
cmd.Parameters.AddWithValue("@txtCase2",textboxCas e2.Text);
cmd.Parameters.AddWithValue("@txtCase3",textboxCas e3.Text);
cmd.Parameters.AddWithValue("@txtCase4",textboxCas e4.Text);
cmd.Parameters.AddWithValue("@answer",cmbAnswer.Te xt);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("سوال مورد نظر با موفقیت اضافه گردید");
clearTextBox();
FillGrid();
اما اگر سورس برنامه رو هم لطف کنید شاید بهتر باشه ، از زحماتتون بسیار سپاس گذارم
-----------------------------------------------------------------------------------------------------------------------------
یه سوال هم در مورد متغیرهای از نوع setting برای چی از این نوع استفاده کردین؟!
چه مزیتی نسبت به متغیر های معمولی داره؟
با اجازه جناب ونیز 2008
کدهای کامل این فرم رو بذارید درخواست سورس هم نفرمایید دوست عزیز قبلا راجب به این مسئله پاسخ داده شده
سلام خدمت استاد عزیز آقای ونیز
من خدایش سورس نمیخوام، تا الان هم سعی کردم خودم روی تمام سورس ها کار کنم، فقط الان به یه مشکل جدی خوردم، این محاسبه کننده جواب های صحیح و غلط و بی پاسخ واسه من اشتباه، جواب درست آزمون رو بهم نمیده، واقعاً مغزم داغ کرده اونقدر این کدهای این صفحه رو مرور کردم، دیگه ناامید شدم و گفتم از شما و باقی دوستان کمک بگیرم!
کدهای این صفحه رو میزارم اگه ممکنه یه نگاه بندازید، خیلی ممنون میشم اگه کمک کنید،(کدهای فرم آزمون)
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;In tegrated 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 تا نزده!
خیلی خیلی ممنونم از شما...
آخرین ویرایش به وسیله ahmad002 : یک شنبه 05 آبان 1392 در 02:56 صبح
سلام دوست عزیز.
مشکل از جایی شروع میشه که ما یه کدی رو بدون اینکه منطقی براش داشته باشیم اضافه می کنیم.
هیچ اشکالی نداره که شما بخواید کدهای درون ویدئوها رو دستخوش تغییرات کنید (نه تنها ایرادی نداره که بسیار کار خوبی هم هست) فقط باید برای هر قطعه کدی که اضافه می کنیم دلیل داشته باشیم و خوب بررسی کنیم آیا این یه خطی که من اضافه میکنم جایی تاثیر گذار هست یا که خیر.
در دکمه Next شما تغییراتی رو لحاظ کردید که تاثیر گذار هست. وقتی کاربر روی دکمه بعدی کلیک میکنه شما میاید مقادیر متغیرهای صحیح، بی پاسخ و غلط رو 0 می کنید. خوب این کار یعنی چی؟ ما که نباید مقادیر این متغیرها رو از بین ببریم.
یه بار دیگه ویدئوی 10 و بخش کدنویسی دکمه next رو با کدهای خودتون مقایسه کنید.
موفق باشید.
این کدهای فرم آزمون. بررسی کنید ببینید کجا رو اشتباه نوشتید :کدهایی که باعث میشد مقدار متغییر های صحیح، بی پاسخ و غلط صفر بشه رو برداشتم، ولی متاسفانه هنوز هم جواب صحیح رو بهم نمیده!
imgcode1.JPG
imgcode2.JPG
imgcode3.JPG
آخرین ویرایش به وسیله veniz2008 : دوشنبه 06 آبان 1392 در 23:26 عصر
با سلام به جناب ونیز 2008 و تشکر از زحماتشون
من پیشنهاد میدم اگه قراره کدی رو هم بذارین عکس از اون قطعه کد بذارین تادوستان حداقل یکبار کد رو تایپ کنند قطعا بعدها از این کار نتیجه بهتری خواهند گرفت
موفق باشی
با زدن دکمه بعدی 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("@listQue stionNumber",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.!!!!!
برای اینکه parent رو با P نوشتید.باید با p مینوشتید.
با سلام
چگونه می توانیم به ترتیب سوالهای غلط و صحیح و بی پاسخ را در فرم دیگر نمایش دهیم
سلام.
توی آموزش هم ما همین کار رو انجام دادیم.
با استفاده از سه متغیر static و البته public ، در فرم مقصد به مقدار این سه متغیر دسترسی پیدا کردیم.
شاید هم منظورتون، نمایش خود سوالات هست!. اینکه کدوم سوال رو اشتباه زده و کدوم رو درست.
اگر جواب شما، چیزی خارج از محدوده آموزش هست، لطفا بصورت کامل سوالتون رو مطرح کنید تا پاسخگو باشم ولی چیزی که من از سوالتون متوجه شدم دقیقا داخل آموزش وجود داره.
آخرین ویرایش به وسیله حمیدرضاصادقیان : چهارشنبه 15 آبان 1392 در 23:31 عصر دلیل: نیازی به توضیح هرچیزی نیست.
برای این کار دیتاتیبل سوالات رو بصورت 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"] = "اشتباه";
}
}
حالا در فرم مقصد، همونطوری که به متغیرها دسترسی داریم می تونید به دیتاتیبل هم دسترسی داشته باشید.
با سلام
جسارتا میتونم بپرسم چرا برنامه با EF و Linq نوشته نشده؟
یعنی شما دیگران رو تشویق مکینید که از Ado.net و Sp ها استفاده کنند؟
در صورت عدم تمایل میتونید پاسخ ندید
با تشکر
سلام دوستان.
با عذر خواهی از مدیریت تالار بخاطر این پست فاقد محتوا.
این چند وقت شرایط به گونه ای رقم خورده که به این نتیجه رسیدم که مدتی در خدمت دوستان نباشم و در تالار فعالیت نداشته باشم.
امیدوارم در غیاب من،دوست عزیزم جناب FastCode و جناب esafb52 به پرسش های دوستان پاسخ بدن بلکه گره ای از مشکل یه شخص باز بشه.
شاد و موفق و سربلند باشید.
با سلام خدمت دوستان
من از اس کیول 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'.
با سلام و ابتدا کسب اجازه از استادو دوست عزیز ونیز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
مشکل پرانتز نگذاشتن نیست
مشکل گذاشتن دو تا single quote (') هست
سلام
با دستور TOP(@questioncount) باز ارور زیر رو میده.
Incorrect syntax near '('.