PDA

View Full Version : ارور An unhandled exception of type 'System.NullReferenceException' occurred in rahrocyclet.exe



mahlake
سه شنبه 02 تیر 1394, 18:34 عصر
سلام آقایون تو رو خدا کمک خیلی کارم گیره...
من هر کدی که میزنم این ارور رو میده چه طور رفعش کنم؟
An unhandled exception of type 'System.NullReferenceException' occurred in rahrocyclet.exe

اینم کدیه که من نوشتم:

private void button17_Click(object sender, EventArgs e)
{
search sr = new search();
sr.afltr.RowFilter = string.Format("Name LIKE '%{0}%'", textBox2.Text);
dataGridView3.DataSource = sr.afltr;
}

mahlake
سه شنبه 02 تیر 1394, 18:41 عصر
عکس ارور
132552

mahlake
چهارشنبه 03 تیر 1394, 06:52 صبح
دوستان و مهندسان لطفا اگر براتو امکان داره کمکم کنید من یه دیتا گرید دارم که میخوام تو اطلاعاتش سرچ انجام بدم اما هر جور که این کد رو مینویسم همش با این خطا مواجه میشم... لطفا کمکم کنید...

sajaaaaad
چهارشنبه 03 تیر 1394, 07:52 صبح
با سلام من که راستش خیلی دقیق نمیدونم به چه روشی کار کردی.! اون کلاس سرچ چیه.؟
.
ولی خب ارورت مربوط به null بودن فک کنم.! یا توی جدول داده ی Null داری یا TextBoxet خالیه.! احتمالا یک مشکلی تو این مایع ها داره.! رکورداتو چک کن. ستونتو شاید اشتباه انتخاب کردی.! داده هاتو کامل چک کن.

mahlake
چهارشنبه 03 تیر 1394, 09:03 صبح
با سلام من که راستش خیلی دقیق نمیدونم به چه روشی کار کردی.! اون کلاس سرچ چیه.؟
.
ولی خب ارورت مربوط به null بودن فک کنم.! یا توی جدول داده ی Null داری یا TextBoxet خالیه.! احتمالا یک مشکلی تو این مایع ها داره.! رکورداتو چک کن. ستونتو شاید اشتباه انتخاب کردی.! داده هاتو کامل چک کن.

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



public class search
{
public DataView afltr;
public void serch(TextBox textBox42)
{
sqlserverdmb InstantObject = new sqlserverdmb();

afltr = new DataView(InstantObject.ExecuteSelectSQL("Select sanad.id,sanad.tvd,sanad.shm,sanad.shsh,sanad.plk, sanad.clr,sanad.cpn,sanad.mob,sanad.shb,sanad.shs, sanad.dtv,sanad.pnb,sanad.odt,sanad.dcb,colleague. cname,colleague.mnc,colleague.tnc,sanad.gng,rclien t.rname,rclient.frn,rclient.rsh,rclient.rcn,rclien t.ptlc,rclient.[add],rclient.rtn,sanad.gpn,sanad.dcs,sanad.dgd,colleag ue.dct,sanad.emza From sanad LEFT Join colleague on sanad.cid=colleague.cid LEFT Join rclient on sanad.rid=rclient.rid where sanad.id like N'%" + Convert.ToInt32(textBox42.Text.Trim()) + "%'"));
}
}



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

و توی کلاس sqlserverdmb هم که اسمش رو InstantObject گذاشتم عملیتا سرچ رو انجام میدم و یک دیتا تیبل برمیگردونم که بریزم توی دیتاویو ام:


public class sqlserverdmb
{
SqlConnection con = new SqlConnection("Data Source=;Initial Catalog=rahro;User ID=;Password=;Persist Security Info=True;");
SqlCommand com = new SqlCommand();
public DataTable ExecuteSelectSQL(String strSQL)
{
if (con.State == ConnectionState.Closed)
{
con.Open();
}
DataTable dt = new DataTable();
SqlDataAdapter adb = new SqlDataAdapter(strSQL, con);
try
{
adb.Fill(dt);
if (con.State == ConnectionState.Open)
{
con.Close();
}
}
catch (Exception)
{
MessageBox.Show("لطفا دسترسی خود را چک کنید", "!!!پیغام", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
DataGridView test = new DataGridView();
test.DataSource = dt;
int i = test.RowCount;
if (con.State == ConnectionState.Open)
{
con.Close();
}
return dt;
}
}



امیدوارم که حالا کد واظح باشه و بتونید کمکم کنید اگر دیدید که هنوز واضح نیست بگید که یه سمپل کد بزارم براتون

sajaaaaad
چهارشنبه 03 تیر 1394, 16:08 عصر
داداش روشت خیلی با من فرق داره
بدون تعارف بخوام بگم واقعا نفهمیدم جریان چیه.! من معمولا با پراسیجر کار میکنم. و وقتی میخوام اطلاعاتمو فیلتر کنم صاف پارامتر تکست باکسمو میفرستم بانک و داده های فیلتر شده رو میگیرم و نمایش میدم. من الان متوجه نمیشم شما چکار کردی. منم تازه کارم. ولی بازم اگر فک میکنی به دردت میخوره نمونه کد بذارم برات به روش خودم :لبخندساده:

alireza264
چهارشنبه 03 تیر 1394, 16:25 عصر
فکر کنم مشکلت تو شرطه چون احتمالا sanad.id از نوع عددیه و شما داری به رشته باهاش برخورد میکنی

where sanad.id like N'%" + Convert.ToInt32(textBox42.Text.Trim()) + "%'"


همین طور بخش from هم مشکل داره هر دستور فقط دو تا جدول رو join میکنه بینشون () بذار

From ( sanad LEFT Join colleague on sanad.cid=colleague.cid ) LEFT Join rclient on sanad.rid=rclient.rid



معنیSystem.NullReferenceException هم اینه که Refrence خالیه

Mahmoud.Afrad
چهارشنبه 03 تیر 1394, 19:49 عصر
DataGridView توی کلاس sqlserverdmb چه کاری انجام میده؟!!

اگر توی عکس پست اول به پنجره locals سمت چپ پایین نگاه کنی میبینی afltr نالnull هست. علتش هم مشخصه چون new نشده.

و یک نکته بگم که اگر میخوای از dataview استفاده کنی دیگه نباید مدام روی دیتابیس کوئری بزنی. یکی رو انتخاب کن یا کوئری بزن یا دیتاویو فیلتر کن.

mahlake
چهارشنبه 03 تیر 1394, 20:06 عصر
فکر کنم مشکلت تو شرطه چون احتمالا sanad.id از نوع عددیه و شما داری به رشته باهاش برخورد میکنی

where sanad.id like N'%" + Convert.ToInt32(textBox42.Text.Trim()) + "%'"


همین طور بخش from هم مشکل داره هر دستور فقط دو تا جدول رو join میکنه بینشون () بذار

From ( sanad LEFT Join colleague on sanad.cid=colleague.cid ) LEFT Join rclient on sanad.rid=rclient.rid



معنیSystem.NullReferenceException هم اینه که Refrence خالیه

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

نه کد جوین ها کار میکنه و درسته...

بله دقیقا همینطوره دیتا ویو رو خالی میفرسته...

که من نهایتا مجبور شدم با اطلاعات دیتا گرید پر کردنه دیتا ویو رو انجام بدم

mahlake
چهارشنبه 03 تیر 1394, 20:08 عصر
DataGridView توی کلاس sqlserverdmb چه کاری انجام میده؟!!

اگر توی عکس پست اول به پنجره locals سمت چپ پایین نگاه کنی میبینی afltr نالnull هست. علتش هم مشخصه چون new نشده.

و یک نکته بگم که اگر میخوای از dataview استفاده کنی دیگه نباید مدام روی دیتابیس کوئری بزنی. یکی رو انتخاب کن یا کوئری بزن یا دیتاویو فیلتر کن.

توی اونجا من هدر کالمن هام رو فارسی میکنم و سطر هام رو رنگ میکنم و تغییرات اینطوری انجام میدم...
بله دقیقا مشکل همینه نال هست و من نیو هم کردم مشکل حل نشد...

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

mahlake
چهارشنبه 03 تیر 1394, 20:10 عصر
کدم بعد آخرین تغییرات به این صورت تغییر کرد اما هنوز هم کار نمیکند ولی دیگه پیغام نال نمیدهد


DataTable dt = (DataTable)dataGridView3.DataSource;
DataView afltr = new DataView(dt);
afltr.RowFilter = string.Format("id LIKE '%{0}%'", Convert.ToInt32(textBox2.Text));
dataGridView3.DataSource = afltr;

mahlake
چهارشنبه 03 تیر 1394, 20:11 عصر
داداش روشت خیلی با من فرق داره
بدون تعارف بخوام بگم واقعا نفهمیدم جریان چیه.! من معمولا با پراسیجر کار میکنم. و وقتی میخوام اطلاعاتمو فیلتر کنم صاف پارامتر تکست باکسمو میفرستم بانک و داده های فیلتر شده رو میگیرم و نمایش میدم. من الان متوجه نمیشم شما چکار کردی. منم تازه کارم. ولی بازم اگر فک میکنی به دردت میخوره نمونه کد بذارم برات به روش خودم :لبخندساده:

آقا کدت رو بفرست اگه به درد منم نخوره شاید به درد یکی دیگه بخوره اگرم به درد من خودت که خیلی خوب میشه

alireza264
چهارشنبه 03 تیر 1394, 21:35 عصر
منم فکر میکنم که مشکل از همون بخشه ولی خوب نمیدونم چطور رفعش کنم... id نوعش بیگ اینته و تکست باکس رو به اینت تبدیل کردم اما جواب نمیده...

نه کد جوین ها کار میکنه و درسته...

بله دقیقا همینطوره دیتا ویو رو خالی میفرسته...

که من نهایتا مجبور شدم با اطلاعات دیتا گرید پر کردنه دیتا ویو رو انجام بدم

سلام دستور like و تک کوتیشن ' رو از شرط حذف کن

where sanad.id = "+ Convert.ToInt32(textBox42.Text.Trim() "




DataTable dt = (DataTable)dataGridView3.DataSource;
DataView afltr = new DataView(dt);
afltr.RowFilter = string.Format("id = ", Convert.ToInt32(textBox2.Text));
dataGridView3.DataSource = afltr;

mahlake
چهارشنبه 03 تیر 1394, 21:40 عصر
سلام دستور like و تک کوتیشن ' رو از شرط حذف کن

where sanad.id = "+ Convert.ToInt32(textBox42.Text.Trim() "




DataTable dt = (DataTable)dataGridView3.DataSource;
DataView afltr = new DataView(dt);
afltr.RowFilter = string.Format("id = ", Convert.ToInt32(textBox2.Text));
dataGridView3.DataSource = afltr;


علیرضا جان آخه میخوام حدودی هم سرچ کنم پس نیاز به لایک و درصد داره اگه سینگل کوتیشن را حذف کنیم مشکلی پیش نمیاد؟
بعد یه سوال من کوئریم رو چطور خالی کنم که برای دفعه دوم خطا نده؟

Mahmoud.Afrad
چهارشنبه 03 تیر 1394, 21:41 عصر
ببین اگر قرار هست از دیتابیس اطلاعات رو دریافت کنی دیگه نیازی به دیتاویو نداری.
خب من با اصلاح کدت متوجه شدم کلاس search اضافه است. میتونی پاکش کنی.
کلاس Sqlserverdmb رو به صورت زیر بنویس

public class Sqlserverdmb
{
private SqlConnection _con;

public string StrCommand { get; set; }

public Sqlserverdmb(string strCommand)
{
StrCommand = strCommand;
}

public DataTable ExecuteSelectSql()
{
DataTable dt = new DataTable();
SqlDataAdapter adb = new SqlDataAdapter(StrCommand, _con);

if (_con.State != ConnectionState.Open)
{
_con.Open();
}
_con = new SqlConnection("Data Source=;Initial Catalog=rahro;User ID=;Password=;Persist Security Info=True;");
adb.Fill(dt);
if (_con.State != ConnectionState.Closed)
_con.Close();
return dt;
}
}


حالا در جایی که میخواهی جستجو انجام بشه به صورت زیر عمل کن

long idForSearch = Convert.ToInt64(textBox2.Text);

try
{
Sqlserverdmb instantObject = new Sqlserverdmb("Select sanad.id,sanad.tvd,sanad.shm,sanad.shsh,sanad.plk, sanad.clr,sanad.cpn,sanad.mob,sanad.shb,sanad.shs, sanad.dtv,sanad.pnb,sanad.odt,sanad.dcb,colleague. cname,colleague.mnc,colleague.tnc,sanad.gng,rclien t.rname,rclient.frn,rclient.rsh,rclient.rcn,rclien t.ptlc,rclient.[add],rclient.rtn,sanad.gpn,sanad.dcs,sanad.dgd,colleag ue.dct,sanad.emza From sanad LEFT Join colleague on sanad.cid=colleague.cid LEFT Join rclient on sanad.rid=rclient.rid where sanad.id like N'%" + idForSearch + "%'");
dataGridView3.DataSource = instantObject.ExecuteSelectSql();
}
catch (SqlException sqlEx)
{
MessageBox.Show(sqlEx.Message);
}


تاپیک های زیر رو هم ببین
http://barnamenevis.org/showthread.php?343579-%D9%86%D9%85%D9%88%D9%86%D9%87-%DA%A9%D8%AF-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87
http://barnamenevis.org/showthread.php?340305-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D9%86%D8%AC%D8%A7%D9%85-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D8%AA%D9%88%D8%B3%D8%B7-%D8%A7%D8%B3%D8%AA%D9%88%D8%B1%D9%BE%D8%B1%D9%88%D 8%B3%DB%8C%D8%AC%D8%B1-stored-procedure

alireza264
چهارشنبه 03 تیر 1394, 21:48 عصر
علیرضا جان آخه میخوام حدودی هم سرچ کنم پس نیاز به لایک و درصد داره اگه سینگل کوتیشن را حذف کنیم مشکلی پیش نمیاد؟
بعد یه سوال من کوئریم رو چطور خالی کنم که برای دفعه دوم خطا نده؟

سلام دستور like و تک کوتیشن ' برای مقایسه رشته هاست نه اعداد

mahlake
چهارشنبه 03 تیر 1394, 21:51 عصر
سلام دستور like و تک کوتیشن ' برای مقایسه رشته هاست نه اعداد
خوب من میخوام اگه نوشتم 44 عدد 13445 رو هم مثلا نشون بده خوب اینجا تکلیف چیه؟ من این نتیجه رو چطور به دست بیارم؟

alireza264
چهارشنبه 03 تیر 1394, 22:17 عصر
خوب من میخوام اگه نوشتم 44 عدد 13445 رو هم مثلا نشون بده خوب اینجا تکلیف چیه؟ من این نتیجه رو چطور به دست بیارم؟

باید نوع فیلد id رو عوض کنی بذار Char

mahlake
چهارشنبه 03 تیر 1394, 22:41 عصر
باید نوع فیلد id رو عوض کنی بذار Char
char رو من میتونم اتو نامبر بزارم؟ به مشکل نمیخورم؟

alireza264
چهارشنبه 03 تیر 1394, 23:30 عصر
char رو من میتونم اتو نامبر بزارم؟ به مشکل نمیخورم؟

اتونامبر هم عددیه با like کار نمیکنه و متوجه دلیلت برای عددی بودن id و یا جستجو بصورت رشته ای نمی شم بهر حای میتونی فیلد id رو تو دستور Select ، تبدیل به رشته کنی با تابع cast و convert
برای نحوه استفاده به این آدرس یه سری بزن
https://msdn.microsoft.com/en-us/library/ms187928.aspx

http://www.sqlservercurry.com/2010/09/convert-integer-to-string-in-sql-server.html
http://www.techonthenet.com/sql_server/functions/convert.php
http://www.codeproject.com/Articles/576178/cast-convert-format-try-parse-date-and-time-sql

mahlake
جمعه 05 تیر 1394, 10:29 صبح
اتونامبر هم عددیه با like کار نمیکنه و متوجه دلیلت برای عددی بودن id و یا جستجو بصورت رشته ای نمی شم بهر حای میتونی فیلد id رو تو دستور Select ، تبدیل به رشته کنی با تابع cast و convertبرای نحوه استفاده به این آدرس یه سری بزنhttps://msdn.microsoft.com/en-us/library/ms187928.aspxhttp://www.sqlservercurry.com/2010/09/convert-integer-to-string-in-sql-server.htmlhttp://www.techonthenet.com/sql_server/functions/convert.phphttp://www.codeproject.com/Articles/576178/cast-convert-format-try-parse-date-and-time-sqlآقا علی رضا خدا خیرت بده خیلی مردی که این همه وقت میزاری تا کمک آدم هایی مثل من بکنی... ممنون...من تو برنامه ام برای هر دیتای جدید نیاز به یک آیدی جدید دارم برای همین این فیلد رو از دیتابیس روی اتو نامبر گذاشتم برای همین نوع اش رو بیگ اینت دادم حالا مشتری میخواد بر اساس ایدی اون شخص سرچ انجام بده و اگه یک ایدی رو زد آیدی های مشابه رو هم نشون بده...حالا من برای این که آیدی یکتا تولید بشه مجبور بودم اون رو عدد تعریف کنم و روی اتو نامبر بزارم چون راه دیگه ای بلد نبودم البته به یه مشکل خیلی بزرگ برخوردم که اتو نامبرم درست کار نمیکنه و گاهی حدود 10000 تا 50000 شماره رو جا میندازه و میره جلو تر که باعث نارضایتی مشتریم شده و من نمیدونم چطور حلش کنم...و دوم این که به دلیلی که ابتدا گفتم نیاز به فیلتر تقریبی دارم... حالا گیر کردم که چیکار کنم...