PDA

View Full Version : سوال: مشکل در ارور object reference



reza4359
دوشنبه 13 دی 1389, 09:20 صبح
دوستان برنامه من موقع ذخیره اطلاعات این ارور رو میده بانکشم SQLEXPRESS هستش با زبان #c
شما میگید چکار کنم البته تقریبا دو ماهی هست که داره بدون مشکل ذخیره میکنه ولی یه دفعه این پیغمامو داد?
ممنونم
اینم کدهام

private void button1_Click(object sender, EventArgs e)
{




if (textBox1.Text == "" || textBox3.Text == "" || textBox4.Text == "" || textBox5.Text == "" || textBox9.Text == "" || maskedTextBox1.Text == "" || maskedTextBox2.Text == "0000/00/00" || maskedTextBox3.Text == "0000/00/00" || maskedTextBox5.Text == "0000/00/00" || textBox6.Text == "" || textBox10.Text == "" || textBox11.Text == "" || comboBox8.Text == "" || textBox14.Text == "" || comboBox2.Text == "" || textBox7.Text == "" || textBox12.Text == "" || maskedTextBox4.Text == "0000/00/00")

MessageBox.Show("فیلدهای خالی و گزینه های انتخاب را پر کنید ", "پیغام سیستم", MessageBoxButtons.OK, MessageBoxIcon.Information);




/* ------------------------------*/



else if (MessageBox.Show("آیا مایل به ذخیره اطلاعات هستید؟", "پیغام سیستم", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{


SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
string x = textBox1.Text;
string a = textBox2.Text;
string b = textBox3.Text;
string c = comboBox1.SelectedItem.ToString();
string d = comboBox3.SelectedItem.ToString();
string y = comboBox2.SelectedItem.ToString();
string ab = comboBox6.SelectedItem.ToString();
string ac = comboBox7.SelectedItem.ToString();
string ad = comboBox8.SelectedItem.ToString();
string ae = textBox14.Text;
int x1 = int.Parse(textBox10.Text);
int x2 = int.Parse(textBox11.Text);
int x3 = int.Parse(textBox12.Text);
string h1 = maskedTextBox4.Text;
string g1 = textBox15.Text;
string g2 = textBox16.Text;
string f = textBox4.Text;
int g = int.Parse(textBox5.Text.Trim());

string h = maskedTextBox1.Text;
string i = maskedTextBox2.Text;
string j = maskedTextBox3.Text;
string k = comboBox4.SelectedItem.ToString();
string l = comboBox5.SelectedItem.ToString();


int p = int.Parse(textBox9.Text);
string q = maskedTextBox5.Text;
int w = int.Parse(textBox6.Text);

int sa = int.Parse(textBox7.Text);

string cmd2 = string.Format(" INSERT INTO book1 (id,name,family,[user],sex,yeg,ill,priod,date1,date2,date3,free,dar,[current],num,dateday,doctor,status,submit,subfree,nofree,n umrade,daterade,sader,kom,khal,sum) values ({0},'{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8 }','{9}','{10}','{11}','{12}','{13}','{14}','{15}' ,'{16}','{17}','{18}','{19}','{20}','{21}','{22}', '{23}','{24}','{25}','{26}')", x, a, b, c, d, y, f, g, h, i, j, k, l, w, p, q, ab, ac, ad, x1, x2, x3, h1, ae, g1, g2, sa);
cmd.CommandText = cmd2;
cmd.Connection = con;
con.Open();

cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show(textBox2.Text + " " + textBox3.Text + " " + " با شماره شناسایی " + " " + textBox1.Text + " " + "با موفقيت اضافه شد ");


if (MessageBox.Show("آیا مایل به صدور گواهی هستید؟", "چاپ گواهی", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{

reoform rep = new reoform();
rep.Show();


this.Hide();
}

}
}

ACorvinus
دوشنبه 13 دی 1389, 14:34 عصر
سلام. به نظر شما بهتر نبود متن پیغام خطا رو هم میذاشتین؟

reza4359
سه شنبه 14 دی 1389, 11:39 صبح
سلام. به نظر شما بهتر نبود متن پیغام خطا رو هم میذاشتین؟
پیغام رو ضمیمه کردم کسی نیست جواب بده لطفا کمک کنید

ACorvinus
سه شنبه 14 دی 1389, 14:50 عصر
سلام.
وقتی برنامه رو Trace می کنین، یعنی برنامه رو با F10 اجرا می کنین، فکر کنم خطایی که میگین در این خط باشه:


con.Open();

اگه حدسم درست باشه دلیلش اینه که شما میخواین Connect بشین، ولی ConnectionString ندارین. برای رفع خطا شما باید یه ConnectionString داشته باشین و اونو در این قسمت قرار بدین:


SqlConnection con = new SqlConnection(ConnectionString);

به یاد داشته باشین که ConnectionString یه مقدار رشته ای داره و باید بسته به نام Server و .... درست بشه. اگه مشکلتون حل نشد برنامه رو به همون نحوی که گفتم Trace کنین و بگین خطا در کدوم خط رخ میده.
موفق باشین.

reza4359
جمعه 17 دی 1389, 10:06 صبح
سلام.
وقتی برنامه رو Trace می کنین، یعنی برنامه رو با F10 اجرا می کنین، فکر کنم خطایی که میگین در این خط باشه:


con.Open();

اگه حدسم درست باشه دلیلش اینه که شما میخواین Connect بشین، ولی ConnectionString ندارین. برای رفع خطا شما باید یه ConnectionString داشته باشین و اونو در این قسمت قرار بدین:


SqlConnection con = new SqlConnection(ConnectionString);

به یاد داشته باشین که ConnectionString یه مقدار رشته ای داره و باید بسته به نام Server و .... درست بشه. اگه مشکلتون حل نشد برنامه رو به همون نحوی که گفتم Trace کنین و بگین خطا در کدوم خط رخ میده.
موفق باشین.
نه، گفتم که برنامه دو ماهه که داره به خوبی اجرا میشه و اونو Setup کردم و روی یه سیستم دیگه نصب شده و بعد از چند مدت یه دفعه این ارور رو داد البته وقتی سیستم رو ری استارت میکنم دوباره ثبت میکنه ولی دوباره بعد از اینکه یه مدت دیگه اطلاعات رو ثبت میکنه دوباره این ارور میاد نمیدونم مشکل از کجاست یعنی تا چند وقت مشکلی نداره ولی دوباره این ارور رو میده به نظر شما مشکل از نرم افزاره یا از سیستمی که برنامه روش نصبه ؟

ACorvinus
شنبه 18 دی 1389, 08:54 صبح
سلام.

من کاری ندارم برنامه 2 ماه کار کرده یا 2 سال!!! مهم اینه که الان کار نمیکنه.
برنامه رو Trace کن ببین تو کدوم خط، خطا میده.

reza4359
شنبه 18 دی 1389, 20:42 عصر
مهندس برنامه الان در حالت setup ارور میده وگرنه سورس برنامه یعنی (برنامه خام )هیچ مشکلی نداره و فقط الان که تعداد زیادی اطلاعات رو ثبت کرده اینجوری شده

ACorvinus
شنبه 18 دی 1389, 23:40 عصر
سلام.

خب حالا که اینطوریه، از Database یه Backup بگیر و برنامه رو Unistall کرده و دوباره Install کن.
اینو دارم جدی میگم، یه بار برای یکی از مشتری های شرکتمون هم این بلا سرش اومد، منم همین کارو کردم درست شد.

یه بار امتحان کن، ضرری نداره که. فقط از Database یه Backup بگیر تا نابود نشی!!!

shuriken
سه شنبه 21 دی 1389, 11:46 صبح
احتمال داره از SQL اتون باشه.
ممکنه مشتریتون سرویسای sql رو دستکاری کرده باشه یا برنامه دیگهای که با اون تداخل داره نصب کرده باشه.

و 1 سوال برای دیتابیستون از فایل آبجکت استفاده کردین؟

gwbasic
سه شنبه 21 دی 1389, 18:10 عصر
کدتون که سرتا پا ایراده بماند ولی برای اینکه مشکل شما حل بشه :
در کدتون هیچ Validation ای وجود نداره مثلا اگر در در کمبو باکس چیزی انتخاب نشده باشد SelectedItem برابر با null می باشد بنابراین .ToString() خطا می دهد پس قبل از هر کدام چک کنید که آیا SelectedItem==null هست یا نه واگر نبود به string تبدیل کنید

reza4359
جمعه 24 دی 1389, 10:39 صبح
کدتون که سرتا پا ایراده بماند ولی برای اینکه مشکل شما حل بشه :
در کدتون هیچ Validation ای وجود نداره مثلا اگر در در کمبو باکس چیزی انتخاب نشده باشد SelectedItem برابر با null می باشد بنابراین .ToString() خطا می دهد پس قبل از هر کدام چک کنید که آیا SelectedItem==null هست یا نه واگر نبود به string تبدیل کنید
سلام دوست عزیز ممنونم از جوابتون ولی من قبلا این کارو کردم و داخل رویداد form_load این کدها رو گذاشتم پس مشکل از اینجا نیست

comboBox1.Items.Add("..مورد مناسب را انتخاب کنید");
comboBox1.SelectedItem = "..مورد مناسب را انتخاب کنید";
comboBox2.Items.Add("..مورد مناسب را انتخاب کنید");
comboBox2.SelectedItem = "..مورد مناسب را انتخاب کنید";
comboBox3.Items.Add("..مورد مناسب را انتخاب کنید");
comboBox3.SelectedItem = "..مورد مناسب را انتخاب کنید";
comboBox4.Items.Add("..مورد مناسب را انتخاب کنید");
comboBox4.SelectedItem = "..مورد مناسب را انتخاب کنید";
comboBox5.Items.Add("..مورد مناسب را انتخاب کنید");
comboBox5.SelectedItem = "..مورد مناسب را انتخاب کنید";
comboBox6.Items.Add("..مورد مناسب را انتخاب کنید");
comboBox6.SelectedItem = "..مورد مناسب را انتخاب کنید";
comboBox7.Items.Add("..مورد مناسب را انتخاب کنید");
comboBox7.SaelectedItem = "..مورد مناسب را انتخاب کنید";
comboBox8.Items.Add("..مورد مناسب را انتخاب کنید");
comboBox8.SelectedItem = "..مورد مناسب را انتخاب کنید";